1

当我在包含通用外键的模型上尝试任何方法(删除、保存等)时,我遇到了一个非常奇怪的错误。我的模型可以容纳不同类型的卡片类型,以及处理它们的工作:

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')
4

1 回答 1

0

解决了。将其留在这里以防万一有人遇到同样的问题。问题与项目有关,而不是 Django 的问题。我使用的 ContentType 模型需要一个特定的字段,并且以某种方式丢失了一个通用的外键(虽然使用普通的外键似乎很好)。将它作为模型的属性添加就可以了:

@property
def required_field(self):
    return self.content_object.some_linked_model.required_field
于 2019-06-11T14:45:14.023 回答