I want to build a report (flag) / bookmark for my project.
I did it, but I don’t understand how to check report (flag) / bookmark exist for object (in my case, this is article) from user. Because I suppose that user can add only one report / bookmark for object.
models.py
class Article(models.Model):
title = models.CharField(max_length=255, db_index=True)
author = models.ForeignKey(
"users.CustomUser", on_delete=models.SET_NULL, null=True, db_index=True
)
content = models.TextField()
class Report(models.Model):
class StatusReport(models.TextChoices):
Inworking = "In working", _("In working")
Accept = "Accept", _("Accept")
Rejeced = "Rejeced", _("Rejeced")
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
name = models.CharField(max_length=250)
body = models.TextField()
date = models.DateTimeField(default=timezone.now, blank=True, null=True)
url = models.URLField()
status = models.CharField(
max_length=255, choices=StatusReport.choices, default=StatusReport.Inworking
)
article = models.ForeignKey(
Article, null=True, blank=True, on_delete=models.SET_NULL)
response = models.TextField(blank=True, null=True)
class Bookmark(models.Model):
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
date = models.DateTimeField(default=timezone.now, blank=True, null=True)
article = models.ForeignKey(
Article, null=True, blank=True, on_delete=models.SET_NULL)
views.py
# Report
class ReportCreateView(SuccessMessageMixin, LoginRequiredMixin, CreateView):
model = Report
form_class = ReportForm
template_name = "articles/report_create.html"
success_message = "%(name)s was created successfully"
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.url = self.request.get_full_path()
return super().form_valid(form)
def post(self, request, slug, *args, **kwargs):
form = self.get_form()
article = Article.objects.get(slug=slug)
if form.is_valid():
obj = form.save(commit=False)
obj.user = self.request.user
obj.article = article
obj.url = self.request.get_full_path()
# I try to build something like this but it isn't work
if report.user.exists():
raise ValidationError("You can't save more than two items")
else:
obj.save()
form.save_m2m()
return redirect("/")
return self.render_to_response({"form": form})
# Bookmark has the same view