Django: Как сделать так, чтобы я мог представлять интерес к любому сообщению в блоге, а не только к одному сообщению в блоге? В настоящее время, после того как я представляю интерес к сообщению в блоге, я больше не могу представлять интерес к любому другому сообщению в блоге. Я получу это сообщение о том, что «Вы уже представили свой интерес к этому сообщению». Хотя я этого не сделал.

Судя по характеру моей модели. Есть ли у меня способ отфильтровать поле «пользователь» в моей модели интересов, чтобы я проверял только, представил ли конкретный пользователь в этом конкретном сообщении в блоге интерес?

Потому что я понимаю, что прямо сейчас они фильтруют его на основе всех сообщений в блоге, и, поскольку я уже отправил 1, он определенно существует. Пожалуйста, дайте мне знать, если вам понадобится мой forms.py, urls.py тоже, если это поможет.

Views.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})

Models.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)


0
user14820658 14 Янв 2021 в 12:22

1 ответ

Лучший ответ

Вы проверяете, существует ли уже объект интереса

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

Вместо того, чтобы смотреть, есть ли строка интересов для этого пользователя в конкретном сообщении

Interest.objects.filter(user=request.user, blog_post=blog_post).exists()
1
iklinac 14 Янв 2021 в 10:03
65716318