我正在尝试在我的 Django 项目上建立一个系统,用户可以在主(索引)页面上对各个帖子发表评论。但是,我在尝试将评论自动连接到帖子时遇到了问题。
这是我在views.py中尝试的代码:
from django.core import paginator
from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse
from .models import *
from django.views.generic import ListView, CreateView, UpdateView
from django.views.generic.detail import DetailView
from .forms import *
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
from django.core.paginator import Paginator
from django.views import View
import random
def index(request, pk=None, *args, **kwargs):
postdata = Post_Data.objects.all()
profiledata = ProfileData.objects.all()
likedata = Like.objects.all()
dislikedata = Dislike.objects.all()
comment = PostComment.objects.all()
postid = Post_Data.objects.get(pk)
# Initialize the comment form
if request.method == 'POST':
comment_form = PostCommentForm(request.POST)
if comment_form.is_valid():
post = comment_form.save(commit=False)
post.user = request.user
post.save()
return redirect('/')
else:
comment_form = PostCommentForm() # Create an empty form
# Pass the comment form to the template context
return render(request, 'index.html', {
'title': 'RoamTrip',
'postdata': postdata,
'profiledata': profiledata,
'likedata': likedata,
'dislikedata': dislikedata,
'comment': comment,
'comment_form': comment_form # Make sure this is included
})
models.py:
from django.contrib import admin
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
from django.conf import settings
from .validators import validate_file_extension
# Create your models here.
class Post_Data (models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE, # Set the appropriate behavior here
null=True
)
time_data = models.DateTimeField(help_text='Enter Time of Upload Here:', auto_now_add=True)
text_data = models.TextField(help_text='Type Here:')
image_data = models.ImageField(upload_to="website/media/", null=True, blank=True, help_text='Upload Image:')
video_data = models.FileField(null=True, upload_to="website/media/", blank=True, validators=[validate_file_extension])
public_data = models.BooleanField(help_text='Public?', null=True)
approval = models.BooleanField(help_text='Is this post approved?', default=True)
class PostComment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post_Data, on_delete=models.CASCADE, related_name='post_comment_id')
post_comment = models.CharField(max_length=500)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"Comment by {self.user} on {self.post}"
urls.py:
urlpatterns = [
path('', views.index, name='RoamTrip'),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
结果我得到了这个错误:
TypeError:无法解压不可迭代的 NoneType 对象
这是错误的行:
postid = Post_Data.objects.get(pk)
.get()
接受关键字参数或 Q 对象。我猜你想按 PK 过滤,所以该行应该是:
postid = Post_Data.objects.get(pk=pk)