Python Django表单的默认值

Python Django表单的默认值,python,django,Python,Django,我有以下型号: class Question(models.Model): section = models.ForeignKey(Section) description = models.TextField() answer = models.TextField(blank=True, null=True) author = models.ForeignKey(settings.AUTH_USER_MODEL) 相应的形式是 class QuestionFo

我有以下型号:

class Question(models.Model):
    section = models.ForeignKey(Section)
    description = models.TextField()
    answer = models.TextField(blank=True, null=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL)
相应的形式是

class QuestionForm(forms.ModelForm):
    class Meta:
        model = Question
        fields = ('description', 'section', 'author')
我的问题是我怎样才能传递给作者的形式价值?作者当前是登录用户(无法访问request.user)


谢谢。

在您的视图中,您可以在实例化表单时将
初始值
传递给表单。
您可以在此处阅读更多信息:

如果不允许用户将任何其他用户设置为此问题的作者,则应在视图中设置此字段,并从表单字段中删除“作者”

例如,如果使用基于类的通用视图:

class CreateQuestionView(generic.CreateView):
    model = Question
    form_class = QuestionForm

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super(CreateQuestionView, self).form_valid(form)

您可以将用户从视图传递到表单,然后在表单上写入
\uuuu init\uuuu
方法以更改字段的初始值:

view.py(使用类似于:

class SomethingView(FormView):
    def get_form_kwargs(self, *args, **kwargs):
        return dict(
            super(SomethingView, self).get_form_kwargs(*args, **kwargs),
            **{'user': self.request.user}
        )
class SomethingForm(forms.modelForm):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        self.fields['user'].initial = self.user.id
        super(SomethingForm, self).__init__(*args, **kwargs)
forms.py类似于:

class SomethingView(FormView):
    def get_form_kwargs(self, *args, **kwargs):
        return dict(
            super(SomethingView, self).get_form_kwargs(*args, **kwargs),
            **{'user': self.request.user}
        )
class SomethingForm(forms.modelForm):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        self.fields['user'].initial = self.user.id
        super(SomethingForm, self).__init__(*args, **kwargs)

这是如果要更改字段的初始值。。。但是,由于用户引用存储在self.user中,现在您可以在FormThank上的任何地方使用它。这起作用了。只需要将super(SomethingForm,self)放在self.fields['user'].initial=self.user.id之前