在我的应用程序中,我有一个模型定义,如:
class SomeModel(models.Model):
someFK = Models.ForeignKey(SomeModel, null=True, blank=True)
otherFK = Models.ForeignKey(OtherModel, null=True, blank=True)
...
此模型保留有关Logs的数据,并且要记录的模型不止一种,因此我为每个相关模型放置了一个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?
答案 0 :(得分:3)
Django grappelli扩展了generic lookup中的Django管理功能。
所以你的ModelAdmin
可以有类似的东西:
class SomeModelAdmin(ModelAdmin):
related_lookup_fields = {
'generic': [['content_type', 'object_id'], ],
}
它解决了我的查找问题。我希望这也能解决你的问题。
答案 1 :(得分:1)
我知道这并不能完全回答你的问题,但你应该使用泛型关系而不是多个外键。然后,您可以实现所需的最终目标。