Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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:无法创建通用外键对象_Django - Fatal编程技术网

Django:无法创建通用外键对象

Django:无法创建通用外键对象,django,Django,我正在使用Django 2.x 我有两种型号 class DynamicUrlObject(models.Model): content_type = models.ForeignKey(ContentType, null=True, on_delete=models.SET_NULL) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type',

我正在使用Django 2.x

我有两种型号

class DynamicUrlObject(models.Model):
    content_type = models.ForeignKey(ContentType, null=True, on_delete=models.SET_NULL)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    domain = models.CharField(max_length=255)

我有一个对象MyModel,想为dynamiccurlobject创建一个记录,并将其链接到MyModel模型

我是这样做的

dy_obj = DynamicUrlObject.objects.get_or_create(
    content_object=my_existing_obj,
    domain='http://example.com'
)

my_existing_obj.my_obj = dy_obj
my_existing_obj.save()
但这并不是为dynamicCurlObject创建记录,并给出如下错误:

django.core.exceptions.FieldError: Field 'content_object' does not generate an 
automatic reverse relation and therefore cannot be used for reverse querying. 
If it is a GenericForeignKey, consider adding a GenericRelation.

不能直接对通用外键[1]进行
筛选
获取
,因此
get\u或\u create()
不起作用。如果您知道
myu existing\u obj
的类型是
MyModel
,则可以使用在
MyModel
上设置的
genericorrelation

try:
    dy_obj = DynamicUrlObject.objects.get(my_obj=my_existing_object, domain=...)  # use the `related_query_name` here
except DynamicUrlObject.DoesNotExist:
    dy_obj = DynamicUrlObject(content_object=my_existing_object, domain=...)
    dy_obj.save()
另外,一旦创建了
dy_obj
,就不需要将反向关系分配给
my_existing_object
generirelation
不是数据库中的具体字段,它只是django ORM知道如何命名关系的一种方式


[1]

哪一行导致错误?为什么要再次分配字段
my_obj
?没必要那样。创建
dy_obj
后,存在反向关系,即
my_existing_obj。my_obj
应返回
dy_obj
。此外,您的
一般关系
应该是复数,因为它是一对多关系。您无法分配它。但错误指向行
domain=http://example.com“
。我评论了这条线,然后它指向上面的那条线。
try:
    dy_obj = DynamicUrlObject.objects.get(my_obj=my_existing_object, domain=...)  # use the `related_query_name` here
except DynamicUrlObject.DoesNotExist:
    dy_obj = DynamicUrlObject(content_object=my_existing_object, domain=...)
    dy_obj.save()