Django Forms如何在ModelForm中访问当前请求用户?

时间:2020-07-18 09:03:37

标签: django django-forms

我正在做一个艰苦的django项目,我再次陷入困境。在执行ModelForm时,我具有此表单。因此,我想在assign字段中过滤查询集,所以如果我执行assign.objects.filter(user_id=1),它将向每个用户显示此查询集,但我想将请求用户放入此查询集中。如何访问当前的请求用户?

class SomeModelForm(forms.ModelForm):

    assign = forms.ModelMultipleChoiceField(
        widget=forms.CheckboxSelectMultiple,
        queryset=Assign.objects.all(),
    )

    class Meta:
        model = SomeModel
        fields = '__all__'

2 个答案:

答案 0 :(得分:3)

将一个另外的user对象传递到您的表单,然后根据用户进行过滤。

forms.py

class SomeModelForm(forms.ModelForm):
    assign = forms.ModelMultipleChoiceField(
        widget=forms.CheckboxSelectMultiple,
        queryset=Assign.objects.none(),
    )

    class Meta:
        model = SomeModel
        fields = '__all__'

   def __init__(self, *args, **kwargs):
       user = kwargs.pop('user', None)
       super().__init__(*args, **kwargs)
       if user:
           self.fields['assign'].queryset = Assign.objects.filter(user=user)

views.py

form = SomeModelForm(user=request.user)

答案 1 :(得分:0)

您只需编写即可

username = request.user.username
print(username)

它将打印当前登录的用户名。

相关问题