Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中的CreateView提交操作中保存当前登录的用户名?_Python_Django_Generics_View - Fatal编程技术网

Python 如何在Django中的CreateView提交操作中保存当前登录的用户名?

Python 如何在Django中的CreateView提交操作中保存当前登录的用户名?,python,django,generics,view,Python,Django,Generics,View,我想创建一个餐馆评论提交页面,其中提交评论的用户的用户名保存在数据库表中。我想我必须重写CreateView的save方法,但我不知道如何重写 这是我到目前为止所拥有的 views.py models.py 我改变了我的类,向其中添加了一个自定义方法,如下所示 class WriteReview(CreateView): model = Review success_url = reverse_lazy('restaurant_list') fields = ['rest

我想创建一个餐馆评论提交页面,其中提交评论的用户的用户名保存在数据库表中。我想我必须重写CreateView的save方法,但我不知道如何重写

这是我到目前为止所拥有的

views.py models.py
我改变了我的类,向其中添加了一个自定义方法,如下所示

class WriteReview(CreateView):
    model = Review
    success_url = reverse_lazy('restaurant_list')
    fields = ['restaurant','review']

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(WriteReview, self).form_valid(form)

这就成功了!:)

我改变了我的类,向其中添加了一个自定义方法,如下所示

class WriteReview(CreateView):
    model = Review
    success_url = reverse_lazy('restaurant_list')
    fields = ['restaurant','review']

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(WriteReview, self).form_valid(form)

这就成功了!:)

正如您所说,您的答案是可行的,但这样编写模型更有意义(代码假设您已经导入了
用户
模型:

class Review(models.Model):
    restaurant = models.ForeignKey('Restaurant')
    review = models.TextField()
    user = models.ForeignKey(User)
    time = models.DateTimeField(auto_now_add=True)
现在该表实际上与
用户
表相关,因此用户详细信息的更改将传播到
查看
模型。然后,您还可以利用方便的快捷方式,如点符号,从
查看
实例访问
用户
属性,或者查看所有用户实例,我们将调用我们的
u
,使用
u.review\u set.all()
进行审阅。您仍然可以使用
form\u valid
方法将用户设置为提交表单的用户,如下所示:

class WriteReview(CreateView):
...

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

正如您所说,您的答案是有效的,但这样编写模型会更有意义(代码假设您已经导入了
用户
模型:

class Review(models.Model):
    restaurant = models.ForeignKey('Restaurant')
    review = models.TextField()
    user = models.ForeignKey(User)
    time = models.DateTimeField(auto_now_add=True)
现在该表实际上与
用户
表相关,因此用户详细信息的更改将传播到
查看
模型。然后,您还可以利用方便的快捷方式,如点符号,从
查看
实例访问
用户
属性,或者查看所有用户实例,我们将调用我们的
u
,使用
u.review\u set.all()
进行审阅。您仍然可以使用
form\u valid
方法将用户设置为提交表单的用户,如下所示:

class WriteReview(CreateView):
...

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

我通过自定义表单有效方法解决了它。下面是代码:def form\u valid(self,form):form.instance.user=self.request.user return super(WriteReview,self)。form\u valid(form)我通过自定义表单有效方法解决了它。下面是代码:def form\u valid(self,form):form.instance.user=self.request.user return super(WriteReview,self)。form\u有效(form)很高兴你提出了这个问题,因为我正试图找到答案。但是,我想在使用泛型CreateView时创建ForeignKey关系。你的代码可以这样做吗?或者我也必须修改我的view类吗?我想知道,当存在ForeignKey关系时,Django不保存用户的id而不是用户名吗self?那么,如果我坚持我的原始代码,但将form_valid方法的第一行更改为:form.instance.user=self.request.user.id,它会不起作用吗?我从来没有这样做过,我现在不在我的开发机器上检查,但尝试一下,看看,我看不出它有什么害处。它起作用了。我不得不重新创建数据库,尽管不知为什么会这样迁移时遇到问题。此外,您不必保存用户id。只需保存用户,它会自动转换为模型中所述的用户id,以对用户模型进行外键。基本上,上述行不起作用,但此-->form.instance.user=self.request.user确实起作用了!嗯,还有很多需要学习的地方。:)很高兴你提出了这个问题,因为我正试图找到答案。但是,我想在使用泛型CreateView时创建ForeignKey关系。你的代码可以这样做吗?或者我也必须修改我的view类吗?我想知道,当存在ForeignKey关系时,Django不保存用户的id而不是用户名吗self?那么,如果我坚持我的原始代码,但将form_valid方法的第一行更改为:form.instance.user=self.request.user.id,它会不起作用吗?我从来没有这样做过,我现在不在我的开发机器上检查,但尝试一下,看看,我看不出它有什么害处。它起作用了。我不得不重新创建数据库,尽管不知为什么会这样迁移时遇到问题。此外,您不必保存用户id。只需保存用户,它会自动转换为模型中所述的用户id,以对用户模型进行外键。基本上,上述行不起作用,但此-->form.instance.user=self.request.user确实起作用了!嗯,还有很多需要学习的地方。:)