当前位置: 首页 > 面试题库 >

在基于类的通用视图CreateView中访问request.user以便在Django中设置FK字段

夹谷信鸿
2023-03-14
问题内容

所以我有一个模型,其中包括:

class Place(models.Model):
    ....
    created_by = models.ForeignKey(User)

我的看法是这样的:

class PlaceFormView(CreateView):
    form_class = PlaceForm

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(PlaceFormView, self).dispatch(*args, **kwargs)

有没有办法让我访问request.user并将created_by设置为该用户?我浏览了所有文档,但似乎找不到任何提示。


问题答案:

如何覆盖form_valid保存表单?自己保存它,对它进行任何操作,然后进行重定向。

class PlaceFormView(CreateView):
    form_class = PlaceForm

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(PlaceFormView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.created_by = self.request.user
        obj.save()        
        return http.HttpResponseRedirect(self.get_success_url())


 类似资料:
  • 问题内容: 我正在使用基于类的通用视图,有人可以建议我如何设置初始值以更新表单吗? 我尝试使用get_initial()方法,但未成功。以下是我尝试的代码 问题答案: 您应该定义一个方法,该方法返回包含初始值的字典: 另外,您可以定义一个值:

  • 问题内容: 背景: 付款服务在后台对付款结果执行ping操作时,将调用该视图-之后,我需要以正确的语言发送电子邮件以确认付款,依此类推。我可以从付款服务器的请求中获取语言代码,并希望将其与Django的i18n系统一起使用,以确定以哪种语言发送电子邮件。 因此,我需要在视图中设置django应用程序的语言。然后一次完成我的模板渲染和电子邮件发送。 设置仅在我测试时影响下一个视图。 还有其他方法吗?

  • 问题内容: 我有一个模型: 如何编写基于类的视图,该视图创建新的模型实例并将外键设置为? 问题答案: 我通过覆盖方法解决了这个问题。下面是详细说明的样式: 但是我们可以简短地说(感谢dowjones123),在docs中提到了这种情况。

  • 问题内容: 我希望该帖子确实被csrf停止了,但是它返回403错误。 但是,如果删除该装饰器并在URLConf中执行此操作 它会工作。 这里发生了什么?它不应该工作,因为我猜那是method_decorator所做的。我正在使用python3.4和django1.7.1 任何建议都很好。 问题答案: 你需要装饰工作方法。它所做的是将视图函数本身的属性设置为,然后中间件在(最外面的)视图函数中对此进

  • 问题内容: 我在登录用户和Django时遇到问题。我有一个名为的类,该类具有to 和与该动物有关的一些数据,例如年龄,种族等。 用户可以将动物添加到数据库,并且我必须跟踪每个动物的作者,因此我需要添加在用户创建动物实例时记录的request.user。 models.py 主要目标是隐藏表单中的发布者字段,并在单击保存按钮时提交登录的用户。 我可以使用来在视图中捕获当前用户initial,但是我也

  • 问题内容: Django视图指向一个函数,如果您只想更改一些功能,则可能会出现问题。是的,函数中可以有数百万个关键字参数,如果有语句,甚至可以更多,但是我在想更多的面向对象方法。 例如,我有一个显示用户的页面。该页面与显示组的页面非常相似,但仍与仅使用另一个数据模型不太相似。小组也有成员等… 一种方法是将视图指向类方法,然后扩展该类。有没有人尝试过这种方法或有其他想法? 问题答案: 我已经创建并使