Django 将用户传递给 ModelForm 以在 ModelChoiceField 查询中使用

Django pass user to ModelForm to use in ModelChoiceField query

所以,我有一个 post 的 ModelForm。该表单包括一个 ModelChoiceField,它显示用户可以 post 选修的课程。我只希望用户 post 到他们订阅的课程。现在,每一门课程都包含在课程查询集中。

基本上,我想将 request.user 传递到我的 PostForm 并将其用于课程 ModelChoiceField 查询集。我现在正在使用这段代码;这个逻辑对我来说很有意义,但它不起作用:/

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('course', 'content', 'image')

    def __init__(self, *args, **kwargs):
        user = kwargs.pop("user", None)
        if user is not None:
            self.course.queryset = user.profile.courses.all()
        super(PostForm, self).__init__(*args, **kwargs)

   course = forms.ModelChoiceField(queryset=Course.objects.all())
   content = forms.CharField(widget=forms.Textarea(attrs={'rows': 5, 'cols': 50}))

我得到的错误是AttributeError at /'PostForm' object has no attribute 'course'

正确的语法是这样的:

self.fields['course'].queryset = Course.objects.filter([...])

我推荐你使用优秀的django braces

UserKwargModelFormMixin 就是您要找的。