9

我为我的模型使用了 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 中的请求并将其传递给表单?

4

2 回答 2

38

在任何类方法中,您都可以使用 self.request 访问请求。因此,您的用户配置文件将可以通过 self.request.user 访问。

基于您提供的链接,您将能够在 get_initial 方法中使用 self.request.user 来设置值。

IE。

def get_initial(self):
    return { 'value1': self.request.user }
于 2012-11-01T15:22:43.073 回答
3

首先,你不需要在那里使用 mixin。只需指定form_classin PersonCreateView; model 也不需要,因为您已经在form_class(假设是 的子类ModelForm)中指定了它。

关于从哪里获取请求,基于类的视图将其保存在对象中,因此您可以在内部执行 self.request.userget_initialget_form_kwargs.

于 2012-11-01T15:28:26.560 回答