Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 错误的可能原因:不能同时使用select_related延迟和遍历字段?_Django_Django Models - Fatal编程技术网

Django 错误的可能原因:不能同时使用select_related延迟和遍历字段?

Django 错误的可能原因:不能同时使用select_related延迟和遍历字段?,django,django-models,Django,Django Models,我试图使用graphene django优化器来删除一些不必要的查询。在我收到此错误消息的某个字段field User.company不能同时使用select_related进行延迟和遍历之前,它一直工作得很好。此字段的唯一区别在于它是models.OneToOne而不是models.ForeignKey。为什么Django要推迟这个领域?是否可以禁用被延迟的字段?如果执行此操作: queryset.select_related('some_fk_field').only('another_fi

我试图使用graphene django优化器来删除一些不必要的查询。在我收到此错误消息的某个字段
field User.company不能同时使用select_related进行延迟和遍历之前,它一直工作得很好。此字段的唯一区别在于它是
models.OneToOne
而不是
models.ForeignKey
。为什么Django要推迟这个领域?是否可以禁用被延迟的字段?

如果执行此操作:

queryset.select_related('some_fk_field').only('another_field')
你可能会错过这场冲突。您告诉Django ORM包含一些_-fk_字段,但您也告诉它将查询限制为仅检索另一个_字段,因此它抱怨它不能这样做。 您可以使用.only()绝对排除所有不详细的内容,但是.select\u related()正试图执行相反的操作,请求一些额外的元素。因此,让它更清楚(我就是这样发现的),下面是处理这种情况的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))
资料来源:

也许您正在queryset上使用
.only()