2

在我的应用程序中,我有一个模型定义,例如:

class SomeModel(models.Model):
    someFK = Models.ForeignKey(SomeModel, null=True, blank=True)
    otherFK = Models.ForeignKey(OtherModel, null=True, blank=True)
    ...

该模型保留有关日志的数据,并且要记录的模型不止一种,因此我为每个相关模型放置了一个 FK。对于每条记录,只使用一个 FK,其他 FK 设置 NULL = True。

但是当我需要记录其他东西时,我不想改变我的模型。所以我改变了我的模型:

class SomeModel(models.Model):
    content_type = models.ForeignKey(ContentType)
    content_id = models.IntegerField()

所以我用以下来得到我想要的:

content_type.get_object_for_this_type(id=content_id)

没关系。但是当 admin.py 发挥作用时,它会导致问题,因为我有 1.000.000+ 数据用于记录一些相关模型,所以我需要使用 raw_id_fields。由于我没有为每个相关模型提供 FK,我必须使用 ContentType 模型和 content_id,但我不知道如何使用 ContentType 来做到这一点?

4

2 回答 2

3

Django grappelli在通用查找中扩展了 Django 管理功能。所以你ModelAdmin可以有类似的东西:

class SomeModelAdmin(ModelAdmin):
    related_lookup_fields = {
        'generic': [['content_type', 'object_id'], ],
    }

结果

它解决了我的查找问题。我希望这也能解决你的问题。

于 2015-04-08T05:52:23.587 回答
1

我知道这并不能完全回答您的问题,但是您应该使用通用关系而不是多个外键。然后你就可以实现你所需要的最终目标。

于 2010-10-16T05:51:27.760 回答