使用ModelForm时,以Django形式设置字段

时间:2013-01-19 15:20:19

标签: django django-models django-forms django-templates

我的模型是我有一个作业列表,每个作业只能由一部分用户(ManyToManyField)完成。然后,人们可以提交工作请求,并将工作分配给可以完成工作的人员中的某个人:

class Job(models.Model):
    ...
    users = models.ManyToManyField(User)

class Job_Request(models.Model):
    ...
    job = models.ForeignKey(Job)
    assigned_to = models.ForeignKey(User)

然后我使用ModelForm创建了一个表单,允许人们编辑作业请求,将作业重新分配给其他人。我的问题是,ModelForm为表单中的“assigned_to”字段创建了一个菜单,其中列出了我们所有的用户。我只希望它显示可以完成这项工作的用户子集。我怎么能这样做?

下面是我的forms.py,我尝试将assigned_to字段设置为可以完成工作的用户子集,但我不知道正确的语法。以下是绝对错误的,因为它创建了一个空菜单。如何在表单或模板中执行此操作?感谢。

class EditJobRequestForm(ModelForm):
    def __init__(self,  *args, **kwargs):
        super(EditJobRequestForm, self).__init__(*args, **kwargs)
        self.fields['assigned_to'].queryset =
            User.objects.filter(username__in=self.instance.job.users.all()]

2 个答案:

答案 0 :(得分:1)

self.fields['assigned_to'].queryset = self.instance.job.users.all() 

请记住,在将模型发送到表单之前必须在实例中设置作业

答案 1 :(得分:0)

        User.objects.filter(username__in=self.instance.job.users.all()]

您正在查询用户名与PK。当然没有比赛。

        User.objects.filter(pk__in=self.instance.job.users.all()]