2

创建通用外键的最简单情况是这样的:

class ModelWithGFK(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

但在我的情况下,我可以从中推断出其他字段的内容类型,因此添加content_typeFK 既多余又容易随着时间的推移而导致不一致。所以我尝试了这个:

class ModelWithGFK(models.
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

    @property
    def content_type(self):
        # Figure out wich content type this instance should have FK to
        return ContentType.objects.get(..........)

但似乎 GFK 类只接受内容类型参数作为外键:

def _check_content_type_field(self):
    """
    Check if field named `field_name` in model `model` exists and is a
    valid content_type field (is a ForeignKey to ContentType).
    """

是否有解决方法(可能通过覆盖 GFK 及其一些方法,例如get_content_type),或者我会放弃,添加 FK 并一直生活在对不一致和知道这种(微小)不可避免的冗余的痛苦中的恐惧?

4

0 回答 0