重定向以创建new_post来发布详细信息无效

时间:2018-11-30 21:24:56

标签: python django django-class-based-views

我的项目中有一个名为论坛的部分,用户可以在其中发布和讨论。

在创建新帖子时,当我尝试将新帖子另存为用户(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')
]

2 个答案:

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

答案 1 :(得分:0)

尝试在form_valid方法中使用,而不要使用重定向。

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