首页 > 解决方案 > Django:如何让我可以对任何博文提交兴趣,而不仅仅是一篇博文?

问题描述

Django:如何让我可以对任何博文提交兴趣,而不仅仅是一篇博文?目前,在我向博客文章提交兴趣后,我无法再向任何其他博客文章提交兴趣。我会收到这条消息,说“您已经提交了对该帖子的兴趣。” 虽然我没有。

从我的模型的性质来看。有没有办法让我过滤我的兴趣模型中的“用户”字段,以便我只检查该特定博客文章中的特定用户是否已经提交了兴趣?

因为我知道现在,他们正在根据所有博文过滤它,只要我已经提交了 1,它肯定存在。如果您也需要我的 forms.py 和 urls.py,请告诉我。

视图.py

def submit_interest_view(request, slug):
    form = SubmitInterestForm()
    user = request.user
    blog_post = get_object_or_404(BlogPost, slug=slug)
    num_blogpost = BlogPost.objects.filter(author=user).count()
    if blog_post.author.email == user.email:
        return HttpResponse('You cannot submit interest to your own post.')
    if Interest.objects.filter(user=request.user).exists() and request.method=="POST": 
        return HttpResponse('You have already submitted your interest to this post.')
    if request.method == 'POST':  
        form = SubmitInterestForm(request.POST, request.FILES)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = user
            obj.blog_post = blog_post
            obj.save()
            InterestInvite.objects.create(interest=obj)
            messages.success(request, 'Your interests have been submitted', extra_tags='submittedinterest')
            return redirect(reverse('HomeFeed:main')) 
         else:
            messages.warning(request, 'Something went wrong. Please try again..', extra_tags='wronginterest')
            return render(request, "HomeFeed/submitinterest.html", {'form': form,'user': user, 'num_blogpost': num_blogpost, 'blog_post': blog_post}) 
    else:
        form = SubmitInterestForm()  
    return render(request, "HomeFeed/submitinterest.html", {'form': form,'user': user, 'num_blogpost': num_blogpost, 'blog_post': blog_post})

模型.py

class Interest(models.Model):
   user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
   timestamp        = models.DateTimeField(auto_now_add=True)
   is_active            = models.BooleanField(blank=False, null=False, default=True)
   my_thoughts         = models.TextField(max_length=5000, null=False, blank=False)
   blog_post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)


class BlogPost(models.Model):
 chief_title            = models.CharField(max_length=50, null=False, blank=False, unique=True)
 body                   = models.TextField(max_length=5000, null=False, blank=False)
 author                     = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
 slug                   = models.SlugField(blank=True, unique=True)


标签: pythondjangodjango-modelsdjango-viewsdjango-forms

解决方案


您确实检查是否已经存在 Interest 对象

Interest.objects.filter(user=request.user).exists(): 

而不是查看特定帖子上该用户是否有兴趣行

Interest.objects.filter(user=request.user, blog_post=blog_post).exists()

推荐阅读