我有以下型号:
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无法访问)。
谢谢。
答案 0 :(得分: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)
答案 1 :(得分:0)
在您的视图中,您可以在实例化时将initial
值传递给表单。
您可以在此处详细了解:https://docs.djangoproject.com/en/dev/ref/forms/api/#dynamic-initial-values
答案 2 :(得分: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)