Перенаправление на публикацию деталей от создания new_post не работает
У меня есть раздел под названием форум в моем проекте, где пользователи могут публиковать и обсуждать.
При создании нового сообщения, когда я пытаюсь сохранить свое новое сообщение как пользователя (рис.), Возникает эта ошибка. Я пытаюсь сохранить имя пользователя, чтобы показать, какой пользователь создает сообщение.
На самом деле проблема показывает, когда я пытаюсь сохранить этот файл.
Я пытался следующим образом:
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 ответа
Попробуйте использовать в своем методе form_valid вместо перенаправления.
return HttpResponseRedirect(reverse('website:details', kwargs={'post_id': post.id,}))
Вы пытаетесь настроить пользователя в 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
это идентификатор пользователя. Было бы лучше, если бы вы изменили свою модель на:
class Post(models.Model):
user = models.ForeignKey(User, on_delete =models.CASCADE)
затем post.user
будет пользователем, и post.user_id
будет идентификатором пользователя. Если вы сделаете это изменение, вам придется запустить makemigrations
а также migrate
изменить имя поля.