Django:无法创建通用外键对象
我正在使用Django 2.x 我有两种型号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',
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()