我是django编程的新手,正在尝试与GenericForeignKeys接触。
我设法创建了一个存储在数据库中的通用外键,但是该模型似乎没有强制引用完整性,
(即,我可以创建对不存在该对象ID的对象类型ID的引用)
(例如:content_type:“发布”,content_id:123,但发布123不存在)。
(在您说出来之前-是的-我知道Django具有一些标记功能-对于我来说,这是一个非常简单的示例/测试,用于理解通用外键并弄清楚它们如何工作,以便我可以实现他们在其他情况下)
我的基本模型是:
class Tag(NamedModel, models.Model):
taggable_models = models.Q(models.Q(model='post') | models.Q(model='discussion'))
content_type = models.ForeignKey(
ContentType,
models.CASCADE,
limit_choices_to=taggable_models,
)
content_id = models.PositiveIntegerField(
_("content id"),
)
content_object = GenericForeignKey(
'content_type',
'content_id',
)
在我的admin.py中,我有:
@admin.register(Tag)
class TagAdmin(VersionAdmin):
readonly_fields = ('created_at',)
list_display = ('content_type', 'content_id', 'created_at', )
fieldsets = (
(None, {
'fields': ('content_type', 'content_id', 'created_at', ),
}),
)
autocomplete_lookup_fields = {
'generic': [['content_type', 'content_id']],
}
但是,当我运行管理页面时,它将允许我针对不存在的帖子ID创建标签。
我是否可以通过某种方式强制实施参照完整性?我想我需要以某种方式使用content_object GenericForeignKey,但是我不知道该怎么做?
非常感谢您的帮助,
克里斯托弗。