AttributeError: 'GenericForeignKey' object has no attribute 'null'
AttributeError: 'GenericForeignKey' object has no attribute 'null'
当我在包含通用外键的模型上尝试任何方法(删除、保存等)时,我遇到了一个非常奇怪的错误。我的模型可以容纳不同类型的卡片类型,以及处理它们的作业:
class JobCards(models.Model):
class Meta:
unique_together = ('content_type', 'object_id')
content_type = models.ForeignKey(
ContentType,
on_delete=models.CASCADE,
help_text=_('Card type')
)
object_id = models.PositiveIntegerField(
help_text=_('Card id')
)
content_object = GenericForeignKey()
job = models.ForeignKey(
Job,
on_delete=models.CASCADE
)
所以这样的操作:
JobCards.objects.create(content_object=card, job=job)
或
job_card = JobCards.objects.get(
job=job,
content_type=ContentType.objects.get_for_model(card),
object_id=card.id
)
job_card.delete()
将因此类错误而失败。
我应该提到我在卡片模型中放置了两个 GenericRelation,但即使删除它们也不会改变最终结果:
job_cards = GenericRelation(JobCards, related_query_name='card')
已解决。
把它留在这里以防万一有人遇到同样的问题。问题与项目有关,而不是 Django 的问题。
我使用的 ContentType 模型需要一个特定的字段,并且以某种方式丢失了一个通用外键(虽然使用普通外键似乎没问题)。
将其添加为模型的 属性 成功了:
@property
def required_field(self):
return self.content_object.some_linked_model.required_field
当我在包含通用外键的模型上尝试任何方法(删除、保存等)时,我遇到了一个非常奇怪的错误。我的模型可以容纳不同类型的卡片类型,以及处理它们的作业:
class JobCards(models.Model):
class Meta:
unique_together = ('content_type', 'object_id')
content_type = models.ForeignKey(
ContentType,
on_delete=models.CASCADE,
help_text=_('Card type')
)
object_id = models.PositiveIntegerField(
help_text=_('Card id')
)
content_object = GenericForeignKey()
job = models.ForeignKey(
Job,
on_delete=models.CASCADE
)
所以这样的操作:
JobCards.objects.create(content_object=card, job=job)
或
job_card = JobCards.objects.get(
job=job,
content_type=ContentType.objects.get_for_model(card),
object_id=card.id
)
job_card.delete()
将因此类错误而失败。
我应该提到我在卡片模型中放置了两个 GenericRelation,但即使删除它们也不会改变最终结果:
job_cards = GenericRelation(JobCards, related_query_name='card')
已解决。 把它留在这里以防万一有人遇到同样的问题。问题与项目有关,而不是 Django 的问题。 我使用的 ContentType 模型需要一个特定的字段,并且以某种方式丢失了一个通用外键(虽然使用普通外键似乎没问题)。 将其添加为模型的 属性 成功了:
@property
def required_field(self):
return self.content_object.some_linked_model.required_field