Невозможно присвоить «8»: «Comment.post» должен быть экземпляром «Post» - PullRequest
0 голосов
/ 04 мая 2020

Я могу получить доступ к сообщению, используя его идентификатор или версию заголовка. И localhost: 8000 / post / working-in-malaysia, и localhost: 8000 / post / 8 загружают пост под названием Working in Malaysia.

Я хочу, чтобы пользователи могли комментировать любые сообщения. Комментарии загружаются с кодом comments = Comment.objects.filter(post=post.id ,active=True)

enter image description here enter image description here

Когда я вручную выбираю значение для поля Post, комментарии сохраняются в базе данных сайтов.

enter image description here

Но я хочу, чтобы значение для поля Post заполнялось автоматически. На основе текущего сообщения отображается.

Я пробовал new_comment.post = post.id и new_comment.post = post.title.

enter image description here

enter image description here

views.py

if request.method == 'POST':

   comment_form = CommentForm(data=request.POST)
    if comment_form.is_valid():
      new_comment = comment_form.save(commit=False)
      new_comment.post = post.id
      new_comment.save()


else:
    comment_form = CommentForm()

urls.py

urlpatterns = [
    path('', PostListView.as_view(), name='blog-home'),
    path('post/new/', PostCreateView.as_view(), name='post-create'), 
    path('post/<slug:pk_slug>/', views.post_detail, name='post-detail'),
    #path('post/<slug:the_slug>/', views.post_detail, name='post-detail'),

    path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete'),
    path('about/', views.about, name='blog-about'),
    #path('your-name/', views.about2, name='blog-about'),
    path('facebook/',TemplateView.as_view(template_name='blog/index.html'), name="facebook")
]

1 Ответ

1 голос
/ 04 мая 2020

Должен быть экземпляром Post означает, что должен быть почтовый объект, а не идентификатор. Итак:

from django.shortcuts import get_object_or_404         // import get_object_or_404

// Post instance which will be assigned to post attribute in Comment model
post_instance = get_object_or_404(Post, id=post.id)

new_comment = comment_form.save(commit=False)
new_comment.post = post_instance
new_comment.save()

...