我的项目中有一个名为论坛的部分,用户可以在其中发布和讨论。
在创建新帖子时,当我尝试将新帖子另存为用户(pic)this error时。我也在尝试保存用户名,以进一步显示哪个用户创建了帖子。
实际上,当我尝试保存this file时出现问题。
我尝试过以下方式:
models.py:
class Post(models.Model):
user_id = models.ForeignKey(User, on_delete =models.CASCADE)
title = models.CharField(max_length = 500, blank = False)
description = models.TextField()
def __str__(self):
return self.title
views.py:
class PostCreate(CreateView):
model = Post
fields=['title','description']
template_name = 'post_form.html'
def self(self, request):
model.user_id = request.user.id
return redirect('website:details',{'post': model})
urls.py
from django.conf.urls import url
from .views import UserFormView , index , user_login,Forum,Details,PostCreate
app_name = 'website'
urlpatterns = [
url(r'^$',index,name = 'index'),
url(r'^register/$',UserFormView.as_view(),name = 'register'),
url(r'^login/$', user_login, name= 'login'),
url(r'^forum/$',Forum, name = 'Forum'),
url(r'details/(?P<post_id>[0-9]+)/$',Details,name= 'details'),
url(r'add/$',PostCreate.as_view(),name = 'newPost')
]
答案 0 :(得分:0)
您正在尝试在def self
中设置用户,但是此代码属于form_valid
方法。
class PostCreate(CreateView):
model = Post
fields=['title','description']
template_name = 'post_form.html'
def form_valid(self, form):
post = form.save(commit=False)
post.user_id = self.request.user # see note below
post.save()
return redirect('website:details', post=post)
顺便说一句,将外键user_id
重命名为user
是一个好主意。目前,post.user_id
是相关用户,post.user_id_id
是该用户的ID。如果您将模型更改为:
class Post(models.Model):
user = models.ForeignKey(User, on_delete =models.CASCADE)
然后post.user
将是用户,post.user_id
将是用户的ID。如果进行此更改,则必须运行makemigrations
和migrate
来更改字段名称。
答案 1 :(得分:0)
尝试在form_valid方法中使用,而不要使用重定向。
return HttpResponseRedirect(reverse('website:details', kwargs={'post_id': post.id,}))