如何使用请求数据在基于Django类的通用createview上设置初始数据

时间:2012-11-01 15:17:01

标签: django django-forms django-generic-views django-class-based-views

我使用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中访问请求并将其传递给表单?

2 个答案:

答案 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_initialget_form_kwargs内执行self.request.user。