我有一个常规的自引用外键:
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/