models.py:
class Entry(models.Model):
title = models.CharField(max_length=255)
description = RichTextField()
tags = models.ManyToManyField('Tag', blank=True)
created = models.DateTimeField(auto_now_add=True)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.title
class Review(models.Model):
VOTE_TYPE = (
('up', 'up'),
('down', 'down'),
)
single_entry = models.ForeignKey(Entry, on_delete=models.CASCADE, null=True, blank=True)
body = models.TextField(null=True, blank=True,)
value = models.CharField(max_length=50, choices=VOTE_TYPE,)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.value
class Tag(models.Model):
name = models.CharField(max_length=200)
description = models.CharField(max_length=280, default="Domyślny opis")
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.name
views.py:
def nowożytność(request):
any_tag = Tag.objects.get(name="Nowożytność")
tags = Entry.objects.filter(tags__name="Nowożytność").order_by('-created')
reviews = tags.review_set.all()
number_reviews = reviews.count()
return render(request, 'kategorie.html', {'any_tag': any_tag, 'tags': tags, 'number_reviews': number_reviews,})
Powyższy widok w views.py nie działa i wyrzuca błąd:
'QuerySet' object has no attribute 'review_set'
Nie do końca rozumiem dlaczego, inny widok, ale z metodą "get" działa:
def wpis(request, pk):
articleObj = Entry.objects.get(id=pk)
reviews = articleObj.review_set.all()
number_reviews = reviews.count()
return (...)
W skrócie – chcę na stronie wyświetlić ilość komentarzy dla każdego wpisu który ma tag "Nowożytność". Tag oraz Review są połączone z Entry (wpisami) metodą ManyToOne. Funkcja '_set' jakoś nie jest zdolna wydobyć ze zmiennej 'tags' przypisanych komentarzy do każdego wpisu.
Jeśli coś nie jest dostatecznie jasne chętnie doprecyzuję.