Python 如何在Django中的CreateView提交操作中保存当前登录的用户名?
我想创建一个餐馆评论提交页面,其中提交评论的用户的用户名保存在数据库表中。我想我必须重写CreateView的save方法,但我不知道如何重写 这是我到目前为止所拥有的 views.py models.pyPython 如何在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
我改变了我的类,向其中添加了一个自定义方法,如下所示
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确实起作用了!嗯,还有很多需要学习的地方。:)