• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Django: Pobieranie komentarzy metodą '_set' (Many to One) wyrzuca błąd "'QuerySet' object has no attribute"

Cloud VPS
0 głosów
354 wizyt
pytanie zadane 22 listopada 2021 w Python przez Dzango111 Użytkownik (670 p.)

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ę.

1 odpowiedź

+1 głos
odpowiedź 22 listopada 2021 przez adrian17 Mentor (354,120 p.)
wybrane 22 listopada 2021 przez Dzango111
 
Najlepsza

Tak na oko...

Funkcja '_set' jakoś nie jest zdolna wydobyć ze zmiennej 'tags' przypisanych komentarzy do każdego wpisu.

Nie "nie jest zdolna". Metoda `review_set` jest metodą klasy Entry, ale nie QuerySeta który tylko tak się składa że pyta o tabelę Entry.

Jak chcesz zbiór recenzji dla zbioru Entry, możesz to zrobić bodajże np tak:

    entries = Entry.objects.filter(tags__name="Nowożytność").order_by('-created')
    reviews = Review.objects.filter(single_entry__in=entries)

 

Podobne pytania

0 głosów
1 odpowiedź 639 wizyt
0 głosów
1 odpowiedź 380 wizyt
+1 głos
1 odpowiedź 176 wizyt

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...