首页 > 解决方案 > 我在主页上有一个评论模型,但它不会自动检测我在所有帖子中写评论的帖子

问题描述

所以我遇到的错误。pk无法识别。因为主页上的帖子太多了。我一直试图通过将 pk 更改为 id 来解决这个问题,以多种方式更改我的评论模型。但是没有用

真正的原因是我必须进入详细视图,以便页面可以轻松检测。哦,看他在这个页面路径('post//', PostDetailView.as_view(), name ="post-detail")上,所以我们可以将此评论保存在特定的 post.pk 上。但我希望一切都连接起来

NameError at / name 'pk' 未定义

class PostListView(ListView, DetailView):   
    model = Post
    template_name = "blog/home.html" # <app>/model>_viewtype>html
    context_object_name = "posts"
    paginate_by = 15
    template = loader.get_template('blog/post_detail.html')

    def get(self, request, *args, **kwargs):
        posts = Post.objects.all().order_by("-id")
        gallerys = Gallery.objects.all()
        comments = Comment.objects.filter()
        likes = Post.objects
        post = request.POST.get(Post)

        # cnc = Contact.objects.all()
        today = timezone.now().date()
        is_liked = False
        # if posts.likes.filter(id = request.user.id).exists():
        #   is_liked = True
        comment_form = CommentForm(request.POST or None)
        context = { 'posts': posts, "likes": likes,"comment_form":comment_form, "comments": comments, "gallerys":gallerys, "today": today}

        # return render(request, "blog/home.html")

        return render(request, "blog/home.html", context)



    def post(self, request, *args, **kwargs):
        form = PostForm()
        posts = Post.objects.all().order_by("-id")
        data2 = Gallery.objects.all()
        comments = Comment.objects.filter()
        likes = Post.objects
        today = timezone.now().date()
        is_liked = False
        comment_form = CommentForm(self.request.POST or None )
        if comment_form.is_valid():
            form.instance.author = request.user
            post = form.save(commit = False)
            content = request.POST.get("content")
            # post = request.POST.get(Post)
            post = get_object_or_404(Post, pk = pk)

            comment = Comment.objects.create(post = post, author = request.user, content= content)
            comment.save()
            return render(request, "blog/home.html", {'posts': posts, "likes": likes,"comment_form":comment_form, "comments": comments, "today": today})

        else:
            comment_form = CommentForm()
        return render(request, "blog/home.html", {'posts': posts, "likes": likes,"comment_form":comment_form, "comments": comments, "gallerys":gallerys, "today": today})


class Post(models.Model):


    STATUS_CHOICES = {
        ("draft", "Draft"),
        ("published", "Published"),
    }
    author = models.ForeignKey(User, on_delete = models.CASCADE )
    title = models.CharField(max_length= 100, null=True, blank=True,  default="Başlık")
    content = models.TextField(blank =True, null=True, default = "Enter your content")
    .....
    objects = models.Manager


    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

    def get_absolute_url(self):
        return reverse("post-detail", kwargs={"pk": self.pk})

    def save(self, *args, **kwargs):
        self.slug = self.__str__()
        return super(Post, self).save(*args, **kwargs)

    #it will show not <Question: Question object (1)> but the authors name or title
    def __str__(self):
        return f"{self.pk}"




class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete = models.CASCADE)
    author = models.ForeignKey(User,on_delete=models.CASCADE)
    content = models.TextField(verbose_name='content', default="Başlık")
    timestamp = models.DateTimeField(default=timezone.now)
    # Name = models.CharField(max_length = 100, default="Başlık")
    # Email = models.EmailField(max_length = 100)
    # Body = models.TextField()
    # Active = models.BooleanField(default = True)
    # Parent = models.ForeignKey("self", on_delete = models. CASCADE, null = True, blank = True, related_name = "replies")

    objects = models.Manager


    def __str__(self):
        return f"{self.pk}"

    def get_absolute_url(self):
        return reverse("blog:post-detail", kwargs={
            'pk': self.pk
        })


#blog app
from . import views

urlpatterns = [
    path('', PostListView.as_view(), name ="blog-home"),
    path('user/<str:username>', UserPostListView.as_view(), name ="user-posts"),
    path('post/<int:pk>/', PostDetailView.as_view(), name ="post-detail"),

    path('post/new/', PostCreateView.as_view(model=Post, success_url=('/')), name ="post-create"),

    path('contact/', contact.as_view(), name ="blog-contact"),

    url(r'^$', views.HomeView.as_view(), name='home'),


]

标签: django

解决方案


事实证明,这更像是迁移问题而不是编码问题。Django 应该提供移民问题的解释,因为它是一个很好的起始语言,应该更加用户友好。

删除数据库中的帖子并迁移而不删除以前的帖子后,它仍然认为帖子上有PK。但是,在关系帖子中删除了用户的 PK,它会出错。无论如何,这可能会有所帮助:

python3 manage.py migrate --fake youtubeapi python manage.py migrate --run-syncdb

python manage.py makemigrations youtubeapi python manage.py makemigrations youtubeapi --empty python manage.py migrate youtubeapi zero python manage.py makemigrations youtubeapi python manage.py squashmigrations youtubeapi 0001_initial python manage.py squashmigrations youtubeapi 0001 python manage.py squashmigrations youtubeapi 0001_squashed_0001_initial

推荐阅读