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之前