Ale*_*sey 6 django django-models
我正在尝试使用graphene-django-optimizer删除一些不必要的查询。它工作得很好,直到我收到此错误消息的某个字段Field User.company cannot be both deferred and traversed using select_related at the same time。与此字段的唯一区别是它models.OneToOne不是models.ForeignKey。为什么 Django 将这个字段推迟?是否可以禁用延迟字段?
如果你这样做:
queryset.select_related('some_fk_field').only('another_field')
Run Code Online (Sandbox Code Playgroud)
您可能会忽略存在冲突。你告诉 Django ORM 包含 some_fk_field,但你也告诉它限制查询只检索 another_field,所以它抱怨它不能这样做。您使用 .only() 绝对排除所有不详细的内容,但 .select_lated() 试图做相反的事情,要求一些额外的元素。为了让它更清楚(这就是我发现的),这里是处理这种情况的 Django 源代码:
if load_fields:
if field.attname not in load_fields:
if restricted and field.name in requested:
raise InvalidQuery("Field %s.%s cannot be both deferred"
" and traversed using select_related"
" at the same time." %
(field.model._meta.object_name, field.name))
Run Code Online (Sandbox Code Playgroud)
来源: https://docs.djangoproject.com/en/2.1/_modules/django/db/models/query_utils/
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |