【问题标题】:User current user on new Django class views forms新 Django 类视图表单上的用户当前用户
【发布时间】:2011-05-29 13:48:23
【问题描述】:

我在trunk上使用django 1.3,开始学习类视图。

我有这个:

class Project(models.Model):
    title = models.CharField(max_length=90)
    slug = models.CharField(max_length=90)
    description = models.TextField()
    owner = models.ForeignKey(User)

class ProjectForm(ModelForm):

    class Meta:
        model = Project
        exclude = ('owner',)
        widgets = {
            'description': Textarea(attrs={'cols': 40, 'rows': 20}),
        }

class ProjectCreateView(CreateView):
    model = Project
    form_class = ProjectForm

    def get(self, request, *args, **kwargs):
        return super(ProjectCreateView, self).get(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return super(ProjectCreateView, self).post(request, *args, **kwargs)

我正在尝试使用 django 中的模型表单获取表单,不包括所有者字段,然后使用 request.user 属性获取字段值。

这种形式是有效的。但是如何确保 ModelForm 使用 request.user 作为 Project.owner 字段呢?

我的第一个猜测是从视图中覆盖 get_form_kwargs 方法

class ProjectCreateView(CreateView):

    # .....

    def get_form_kwargs(self, **kwargs):
        self.initial['owner': self.request.user})
        kwargs = super(ProjectCreateView, self).get_form_kwargs(**kwargs)
        return kwargs

但似乎对模型表单使用的数据没有影响

【问题讨论】:

  • 由于我不知道如何使用当前的 django trunk 版本正确执行此操作,因此我制作了一张带有补丁的票来解决此问题 →code.djangoproject.com/ticket/14940

标签: django django-forms


【解决方案1】:

get_form_kwargs 应该为您的表单返回 dict 的参数 - 您设置了 self.initial,但您没有将其附加到 kwargs

def get_form_kwargs(self, **kwargs):
    kwargs = super(ProjectCreateView, self).get_form_kwargs(**kwargs)
    kwargs['initial']['owner'] = self.request.user
    return kwargs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-24
    • 2013-01-03
    • 1970-01-01
    • 2020-09-25
    • 2011-05-07
    • 2016-02-21
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多