从创建 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。如果进行此更改,则必须 运行 makemigrationsmigrate 更改字段名称。

尝试在您的 form_valid 方法中使用而不是重定向。

 return HttpResponseRedirect(reverse('website:details', kwargs={'post_id': post.id,}))