如何限制Django管理员的下拉列表

时间:2010-11-16 16:52:18

标签: python django django-admin

class A(models.Model):
    foreign = models.ForeignKey(B, unique=True)

我有上面的代码 - 如何确保在A'管理员的下拉菜单中,对于外国人来说,我只能获得独特的选择?这只是为了防止用户违反唯一性约束并显示管理错误消息。

1 个答案:

答案 0 :(得分:0)

请查看ModelAdmin.formfield_for_foreignkey()here。缺点是不得不诉诸raw SQL

class AModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "foreign":
        kwargs["queryset"] = B.objects.raw('SELECT * FROM myapp_a where not exists (select id from myapp_b where b.id=a.foreign_id')
    return super(AModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

恕我直言“非空非空白独特FK”看起来是重新思考建模的好机会 - 可能正在合并两个模型。每次我发现自己在Django中苦苦挣扎时,我都试图做一些天真的事情。