python - 禁止 Django 自引用外键指向自身对象

标签 python django django-1.10

我有一个常规的自引用外键:

idol = models.ForeignKey("self", on_delete=models.CASADE)

管理页面允许我选择相同的对象 ID。如何防止 django 管理表单显示它?

最佳答案

您可以覆盖 formfield_for_foreignkey在您的 ModelAdmin 类的子类中。

The formfield_for_foreignkey method on a ModelAdmin allows you to override the default formfield for a foreign keys field.

父对象id可以保存在change_view方法中:

class IdolAdmin(admin.ModelAdmin):
    def change_view(self, request, object_id, form_url='', extra_context=None):
        self.object_id = object_id
        return super(IdolAdmin, self).change_view(
            request, object_id, form_url, extra_context=extra_context,
        )

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "idol":
            kwargs['queryset'] = Idol.objects.exclude(pk=self.object_id)
        return super(IdolAdmin, self).formfield_for_foreignkey(
            db_field, request, **kwargs)

关于python - 禁止 Django 自引用外键指向自身对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40782792/

相关文章:

python - 用于迭代 numpy 数组列表的行的生成器

python - 在 Django 中,管理移动站点和桌面站点的最佳方法是什么?

python - 如何去除标签?

python - 重写__new__疑惑

python - 将现有的 Python 程序合并到 Django 网站中

python - 属性错误 : module 'urllib' has no attribute 'urlopen'

python - 在 Django 管理命令中添加虚假换行符

python - 为什么我偶尔会使用 django-constance 遇到 ImportError?

django - 使用 anchor 标记链接到 Django 中另一个应用程序(页面)中的特定 div

python - 如何在 Django 中包含条件 order_by?