Ich habe ein Modell Beitrag, in dem der Benutzer einen Kommentar mit einer Reihe von Bewertungen hinterlassen kann. Ich möchte die Benutzerkommentare auf nur einen pro Beitrag beschränken. Ich habe Probleme, dass bis in meiner Ansichtdjango-forms: erlauben eingeloggten Benutzer, nur einen Kommentar pro einzelnen Beitrag einzureichen
Modelle
class Comment(models.Model):
post = models.ForeignKey(Post, related_name="comments")
user = models.ForeignKey(User, related_name="usernamee")
...
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
class Post(models.Model):
...
Ansichten
def add_comment(request, slug):
post = get_object_or_404(Post, slug=slug)
# I tried wrapping all of the below in an "if" statement, something like
# if request.user.comment.exists(): to check if the user has already
# left a comment on this specific post, but I'm not sure of the right way to perform such a check here.
if request.method == 'POST':
form = CommentForm(request.POST or None)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.user = request.user
comment.email = request.user.email
comment.picture = request.user.profile.profile_image_url()
comment.save()
messages.success(request, "Thank you for leaving a review!")
return redirect('blog:post_detail', slug=post.slug)
else:
messages.error(request, "Something went wrong! We weren't able to process your review :(")
else:
form = CommentForm()
template = "blog/post/add_comment.html"
context = {
'form': form,
'post': post,
#'comment_count': comment_count
}
return render(request, template, context)
Ich bin unter dem Eindruck einstellen, dass alles, was ich brauchen würde, ist der gesamte Formular Code wickelt von meinem add_comment view in einer Art von Validierungssystem, das überprüft, ob der aktuelle angemeldete Benutzer bereits einen Kommentar zu diesem bestimmten Post hinterlassen hat (siehe Kommentare in der Ansicht)
Jeder weiß, was eine mögliche Lösung sein könnte? Oder wenn ich das überhaupt richtig mache?
Vielen Dank! Alles, was ich brauchte, war 'user_comments = post.comments.filter (user = request.user)'. Ich habe meine gesamte Formularanforderung in die if-Anweisung eingeschlossen, sodass der Benutzer, wenn er bereits eine Rezension hinterlassen hat, diese nicht einmal auf die formularseite add_comment zugreifen kann. Es ist so einfach, darüber nachzudenken, aber für das Leben von mir konnte ich nicht herausfinden, wie man die Information darüber erhält, ob der Benutzer kommentiert hat oder nicht. Danke noch einmal!! – dmandres
@dmandres Gern geschehen! – wencakisa