【问题标题】:Django Form ChoiceField with Queryset带有查询集的 Django 表单选择字段
【发布时间】:2018-06-02 18:22:26
【问题描述】:

我需要在ModelForm中获取该公司的其他用户来设置主用户,我不知道如何获取该表单中的变量?

在视图中需要的变量是:

request.user.profile.firm

这是需要创建的表单。

class FirmForm(forms.ModelForm):

    primary = forms.ModelChoiceField(
        queryset=User.objects.filter(name=request.user.profile.firm))

    class Meta:
        model = Firm

简介模型:

class Profile (models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    firm = models.ForeignKey(
        Firm, on_delete=models.CASCADE, null=True, blank=True)


    def __str__(self):
        return str(self.user.username)

公司模型

class Firm (models.Model):
    name = models.CharField(max_length=100)

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

【问题讨论】:

  • 你能说清楚一点吗?问题不够清楚
  • 我需要让公司的所有其他用户在 ModelForm 中设置主用户。所以我需要找到一种方法来查询所有具有相同公司名称的用户。有可能吗?
  • 发布你的模型,这个有什么错误
  • 我可以在表单中获取 request.user 吗?

标签: django forms model


【解决方案1】:
primary = forms.ModelChoiceField(
        queryset=User.objects.filter(name=request.user.profile.firm.name))

在你的模型表单中使用它

在您访问表单的视图中

FirmForm(request=request)

【讨论】:

  • 它在表单内给我一个带有请求的错误。
  • primary = forms.ModelChoiceField (queryset=User.objects.filter(name=request.user.profile.firm.name)) NameError: name 'request' is not defined
  • form = FirmForm (request.POST or None, instance = Firm)
【解决方案2】:

我得到了这个工作。我能做的最好的。谢谢。

def __init__ ( self,  *args, **kwargs ):
    super ( FirmForm, self ).__init__ ( *args, **kwargs )
    instance = getattr ( self, 'instance', None )
    firm = self.instance
    self.fields [ 'contact' ].queryset = Profile.objects.filter ( firm = firm )

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2020-05-09
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多