我使用Django的通用createview作为我的模型
from myproject.app.forms import PersonForm
class PersonMixin(object):
model = Person
form_class = PersontForm
class PersonCreateView(PersonMixin, CreateView):
pass
这非常适合用我的自定义表单显示Person的创建视图。但是,我有一个字段,我希望预先填充一个值。我找到了这个答案:Set initial value to modelform in class based generic views
但是,我预先填充的值来自request.user的配置文件。如何在PersonCreateView中访问请求并将其传递给表单?
答案 0 :(得分:35)
在任何类方法中,您都可以使用self.request访问请求。因此,您可以使用self.request.user访问您的用户个人资料。
在您提供的链接的基础上,您可以在get_initial方法中使用self.request.user来设置值。
即
def get_initial(self):
return { 'value1': self.request.user }
答案 1 :(得分:3)
首先,您不需要在那里使用mixin。只需在form_class
中指定PersonCreateView
即可;也不需要模型,因为您已经在form_class
中指定了它(假设它是ModelForm
的子类)。
关于从何处获取请求,基于类的视图将其保存在对象中,因此您可以在get_initial
或get_form_kwargs
内执行self.request.user。