【问题标题】:Display the users that belong to a certain group in Django ModelForm在 Django ModelForm 中显示属于某个组的用户
【发布时间】:2017-08-08 02:05:50
【问题描述】:

我已经构建了以下模型。我认为这很容易被问到,但我真的很坚持!

模型的一部分

class Task(models.Model):
    Taskdetails = models.CharField(max_length=500, null=True)    
    employee = models.ForeignKey("auth.User", null = True)

    def __str__(self):
        return str(self.id)

表格

class TaskForm (ModelForm):

    class Meta:
        model = Task
        fields = ('Taskdetails','employee',)

部分浏览量

def task_new(request):
    if request.method == "POST":
        task_form = TaskForm(request.POST)

        if task_form.is_valid():
           task_form.employee = User.objects.filter(groups__name='supervisor')

因此,在我的模板中,当我创建模型实例时,在下拉菜单中,我试图显示属于某个组的用户(在此示例中为组主管)。相反,在模板中,下拉菜单显示所有用户,没有考虑我在视图中放置的过滤器。

总而言之,我试图在 Django 1.9 版本中按组过滤用户。

同样重要的是要提到我使用的是默认用户模型,所以属性 group 没有在模型中声明。当我将下面一行写入 Python 控制台时,它只显示属于“主管”组的用户。

User.objects.filter(groups__name='supervisor')  

【问题讨论】:

标签: django django-models django-forms django-views


【解决方案1】:

您希望在显示表单时将员工限制为某些用户(主管),对吗?

那我不明白你为什么在你发布表单之后将表单的员工字段设置为某个值。

你可能想要的是这样的:

class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        fields = ('Taskdetails','employee',)

    def __init__(self, *args,**kwargs):
        super (TaskForm,self ).__init__(*args,**kwargs)
        self.fields['employee'].queryset = User.objects.filter(groups__name='supervisor')

【讨论】:

  • 它几乎可以工作了!我忘了提及另一个重要部分:保存此实例后,属于不同组的另一个用户需要编辑 Same Form(不同的视图模板)但在第二种形式(即与以前相同的形式),需要显示来自不同组的用户(例如“技术人员”)。如果我在 init 中声明,groups_name = supervisor,那么在每个表单中,只会显示属于 group supervisor 的用户!有什么办法吗?谢谢你的帮助!
  • 检查这个答案:stackoverflow.com/a/8841565/630877 基本上你必须另外检查表单中的request.user。然后,您可以根据用户对员工查询集使用不同的过滤器(groups__name=...。)
猜你喜欢
  • 2015-10-04
  • 1970-01-01
  • 2020-12-03
  • 2016-07-18
  • 2021-07-06
  • 2019-02-20
  • 2014-01-02
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多