如何限制 Django admin 中的下拉菜单

发布于 2024-10-02 14:05:17 字数 176 浏览 1 评论 0原文

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

我有上面的代码 - 如何确保在 A 管理员下的下拉列表中,对于“外国”,我只看到独特的选择?这只是为了防止用户违反唯一性约束并显示管理错误消息。

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

I have the code above - how can I ensure that in the dropdown under A's Admin, for 'foreign', I am only presented with unique choices? This is just to prevent a user violating the uniqueness constraint and being presenting with the admin error message.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

煮酒 2024-10-09 14:05:17

请查看 ModelAdmin.formfield_for_foreignkey() 在这里。缺点是必须求助于 原始 SQL< /a>.

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 中挣扎得太厉害时,我都在尝试做一些天真的事情。

Please look at ModelAdmin.formfield_for_foreignkey() here. The downside is having to resort to 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)

IMHO "non-null non-blank unique FKs" looks like good opportunity to rethink your modeling - may be merging two models. Everytime I found myself struggling too hard in Django I was trying to do something naive.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文