1

我有以下模型:

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 不可访问)。

谢谢你。

4

3 回答 3

3

您可以将用户从视图传递到表单并覆盖表单上的__init__方法以更改字段的初始值:

view.py (使用CBV)类似于:

class SomethingView(FormView):
    def get_form_kwargs(self, *args, **kwargs):
        return dict(
            super(SomethingView, self).get_form_kwargs(*args, **kwargs),
            **{'user': self.request.user}
        )

forms.py 类似:

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)
于 2013-08-23T13:37:15.483 回答
0

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

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

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)
于 2013-08-23T13:32:23.483 回答
0

在您看来,您可以initial在实例化表单时将值传递给表单。您可以在此处阅读更多相关信息:https ://docs.djangoproject.com/en/dev/ref/forms/api/#dynamic-initial-values

于 2013-08-23T13:29:31.173 回答