Перенаправление на публикацию сведений о создании new_post не работает - PullRequest
0 голосов
/ 01 декабря 2018

В моем проекте есть раздел с именем forum, где пользователи могут публиковать и обсуждать.

При создании нового сообщения, когда я пытаюсь сохранить свое новое сообщение как пользователя (рис.) эта ошибка происходит.Я также пытаюсь сохранить имя пользователя, чтобы показать, какой пользователь создает сообщение.

На самом деле проблема отображается, когда я пытаюсь сохранить этот файл .

Я пытался вследующим образом:

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 голосов
/ 01 декабря 2018

Попробуйте использовать в своем методе form_valid вместо перенаправления.

 return HttpResponseRedirect(reverse('website:details', kwargs={'post_id': post.id,}))
0 голосов
/ 01 декабря 2018

Вы пытаетесь установить пользователя в 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, чтобы изменить имя поля.

...