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

Django wyświetlenie (w template i adminie) wartości obliczanej w modelu z adnotacją @property

0 głosów
200 wizyt
pytanie zadane 9 lutego 2023 w Python przez reaktywny Nałogowiec (46,230 p.)
edycja 9 lutego 2023 przez reaktywny
# Kod znaleziony na stackoverflow

models.py


class Ticket(models.Model): 
   ...
   price = IntegerField() # cena biletu
   ...

class ClientPurchase(models.Model):
    ...
    purchase = models.ManyToManyField(Ticket, verbose_name="Zakupione bilety")
    ...
    ...
 
    @property
    def calculated_price(self):
        return sum([p.price for p in self.purchase])

W admin.py

@admin.register(models.ClientPurchase)
class ClientPurchaseAdmin(admin.ModelAdmin):
    readonly_fields = ('calculated_price',)

W template wpisuje:

{% for obj in object_list %}
    {{ obj.calculated_price }}
{% endfor %}

Kod zapożyczony z SO (jako odpowiedź), ale u mnie zupełnie nie działa.

W Django Admin dostaje błąd:

Django Version:    4.1.6
Exception Type:    TypeError
Exception Value:    
'ManyRelatedManager' object is not iterable

A template nie chce wyświetlić wyliczonej wartości calculated_price.

Odpowiedź znalazłem - poniżej w komentarzu!

komentarz 9 lutego 2023 przez reaktywny Nałogowiec (46,230 p.)

Znalazłem odpowiedź, niech będzie dla innych:

return sum([p.price for p in self.purchase])

zamieniamy na:

return sum([p.price for p in self.purchase.all()])

i działa pięknie :)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 208 wizyt
pytanie zadane 15 stycznia 2019 w Python przez Ender_ Początkujący (370 p.)
0 głosów
1 odpowiedź 229 wizyt
pytanie zadane 13 kwietnia 2021 w Python przez eugi Użytkownik (610 p.)
0 głosów
1 odpowiedź 429 wizyt
pytanie zadane 21 listopada 2019 w Python przez Dawid89 Obywatel (1,210 p.)

93,604 zapytań

142,526 odpowiedzi

322,991 komentarzy

63,088 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
...