当前位置:  开发笔记 > 编程语言 > 正文

Django admin-在下拉菜单中限制选择

如何解决《Djangoadmin-在下拉菜单中限制选择》经验,为你挑选了1个好方法。

我现在开始使用django,尝试基于用户信息过滤数据时遇到问题。让我解释一下我的应用程序如何工作。我的应用中的用户属于一家公司。因此,我创建了一个名为Company的表来捕获公司信息。然后,我创建了另一个名为UserCompany的表。基本上,它存储Django用户的ID和我公司的表的ID。现在,我想根据用户的公司ID过滤用户将在Django Admin中看到的数据。他/她只能查看基于其公司ID的数据。我能够get_queryset在admin.py中找到该用户。我现在唯一的问题是,由于外键在admin中显示的下拉列表没有被过滤。我做了一些研究,发现了关于limit_choices_to的信息。我可以像这样静态设置:

class Cleaner(models.Model):
    company = models.ForeignKey('Company',limit_choices_to = {'companyname' = 'Test'}

管理部分中的下拉列表仅显示公司测试。我如何动态地做到这一点?我是在模型中执行还是在admin.py中执行?请帮忙!!



1> Bipul Jain..:

现在该为模型设置CustomAdmin了。您将必须重写ModelAdmin的formfield_for_foreignkey方法

class CleanerAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
         if db_field.name == "company":
                 kwargs["queryset"] = Company.objects.filter(name='Test')
         return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

admin.site.register(Cleaner, CleanerAdmin)

如果有特定于会话的过滤器,您需要参考登录的用户对象,那么您也可以参考请求对象。您可以在此处编写任何逻辑。

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有