【问题标题】:Setting fields in Django form, when using ModelForm使用 ModelForm 时在 Django 表单中设置字段
【发布时间】:2013-01-03 03:46:24
【问题描述】:

我的模型是我有一个工作列表,每个工作只能由一部分用户完成(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,我尝试将 assignment_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()]

【问题讨论】:

  • 怎么样:self.fields['assigned_to'].queryset = self.instance.job.users.all()?请记住,在将模型发送到表单之前,必须在实例中设置作业。
  • 是的,这行得通,谢谢!你救了我,因为我在墙上没有被我的头撞到的地方用光了。我没有正确理解自我和实例。现在开始更多乐趣。

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


【解决方案1】:
self.fields['assigned_to'].queryset = self.instance.job.users.all() 

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

【讨论】:

    【解决方案2】:
            User.objects.filter(username__in=self.instance.job.users.all()]
    

    您查询的是用户名与 PK。当然没有匹配。

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

    【讨论】:

      猜你喜欢
      • 2011-03-17
      • 2015-07-04
      • 2014-08-19
      • 2012-02-21
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多