Django GenericForeignKey参照完整性

时间:2018-07-05 12:21:06

标签: django django-models django-admin referential-integrity generic-foreign-key

我是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,但是我不知道该怎么做?

非常感谢您的帮助,

克里斯托弗。

0 个答案:

没有答案