尝试在 ContentType 下访问 Django 中的 'content_object' 字段
Trying to access 'content_object' fields in Django under ContentType
我正在尝试通过 Thing
查询集访问 Item
模型,但不断收到错误消息:
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.
class ThingContent(models.Model):
content_id = models.AutoField(primary_key=True, null=False)
thing = models.ForeignKey('Thing', on_delete=models.SET_NULL, null=True)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
我尝试通过添加 related_query_name
来更新 Item
上的字段,但没有成功。
self.queryset.filter(items__item_date=exact_item_date))
class Item(models.Model):
id = models.AutoField(primary_key=True, null=False)
item_date = models.DateField(**options)
thing_content = GenericRelation('ThingContent', related_query_name='items')
content_object
是通用的。您必须按 object_id
和 content_type
过滤才能知道您 FK 通用的对象。
您再试一次这样的查询:
ThingContent.objects.filter(
items__item_date=item_date,
content_type=ContentType.objects.get_for_model(Item)
)
此查询的意思是:查找所有 ThingContent
与 Item
的映射,并且 item_date
符合您想要的过滤器。
我正在尝试通过 Thing
查询集访问 Item
模型,但不断收到错误消息:
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.
class ThingContent(models.Model):
content_id = models.AutoField(primary_key=True, null=False)
thing = models.ForeignKey('Thing', on_delete=models.SET_NULL, null=True)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
我尝试通过添加 related_query_name
来更新 Item
上的字段,但没有成功。
self.queryset.filter(items__item_date=exact_item_date))
class Item(models.Model):
id = models.AutoField(primary_key=True, null=False)
item_date = models.DateField(**options)
thing_content = GenericRelation('ThingContent', related_query_name='items')
content_object
是通用的。您必须按 object_id
和 content_type
过滤才能知道您 FK 通用的对象。
您再试一次这样的查询:
ThingContent.objects.filter(
items__item_date=item_date,
content_type=ContentType.objects.get_for_model(Item)
)
此查询的意思是:查找所有 ThingContent
与 Item
的映射,并且 item_date
符合您想要的过滤器。