如何限制Django管理中的下拉菜单

1 投票
1 回答
690 浏览
提问于 2025-04-16 07:09
class A(models.Model):
    foreign = models.ForeignKey(B, unique=True)

我有上面的代码 - 我该如何确保在A的管理界面下的下拉菜单中,对于'foreign'选项,我只看到独特的选择?这样做是为了防止用户违反唯一性约束,从而出现管理错误信息。

1 个回答

0

请查看 ModelAdmin.formfield_for_foreignkey() 的相关内容,链接在这里:这里。不过,使用这个方法的缺点是可能需要使用 原始 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)

在我看来,“非空非空白的唯一外键”是一个重新考虑你模型设计的好机会——也许可以考虑合并两个模型。每当我在 Django 中遇到困难时,通常是因为我在尝试做一些过于简单的事情。

撰写回答