从创建 new_post 重定向到 post 详细信息不起作用
Redirect to post details from creating new_post doesn't work
我的项目中有一个名为论坛的部分,用户可以在其中 post 和讨论。
在创建新 post 时,当我尝试将新 post 保存为用户时(图片)this error。我也在尝试保存用户名,以进一步显示哪个用户创建了 post.
当我尝试保存 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')
]
您正试图在 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
更改字段名称。
尝试在您的 form_valid 方法中使用而不是重定向。
return HttpResponseRedirect(reverse('website:details', kwargs={'post_id': post.id,}))
我的项目中有一个名为论坛的部分,用户可以在其中 post 和讨论。
在创建新 post 时,当我尝试将新 post 保存为用户时(图片)this error。我也在尝试保存用户名,以进一步显示哪个用户创建了 post.
当我尝试保存 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')
]
您正试图在 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
更改字段名称。
尝试在您的 form_valid 方法中使用而不是重定向。
return HttpResponseRedirect(reverse('website:details', kwargs={'post_id': post.id,}))