mam tę długą oświadczenie queryset na widokuRe oceniać zapytania django po zmianach dokonanych na bazie
contributions = user_profile.contributions_chosen.all()\
.filter(payed=False).filter(belongs_to=concert)\
.filter(contribution_def__left__gt=0)\
.filter(contribution_def__type_of='ticket')
że używam w moim szablonu
context['contributions'] = contributions
A później na tym widoku dokonać zmian (dodaj lub usuń rekord) do tabeli contributions_chosen, a jeśli chcę, aby mój kontekst ["wkład"] został zaktualizowany, muszę zażądać bazy danych z tym samym długotrwałym zapytaniem.
contributions = user_profile.contributions_chosen.all()\
.filter(payed=False).filter(belongs_to=concert)\
.filter(contribution_def__left__gt=0)\
.filter(contribution_def__type_of='ticket')
A potem znowu aktualizować mój kontekst
context['contributions'] = contributions
więc zastanawiałem się, czy tam jakiś sposób mogę uniknąć powtarzania mój własny, do przewartościowania składki więc faktycznie odzwierciedla rzeczywistych danych w bazie danych. Najlepiej byłoby zmodyfikować składki zestawu zapytań, a ich wartości zostałyby zaktualizowane, a jednocześnie baza danych odzwierciedliłaby te zmiany, ale nie wiem, jak to zrobić.
UPDATE: To co robię pomiędzy dwoma kontekście [ 'wkład'] = wpłaty
dodać nowy obiekt przyczynek do contributions_chosen (jest to relacja M2M),
contribution = Contribution.objects.create(kwarg=something,kwarg2=somethingelse)
user_profile.contributions_chosen.add(contribution)
contribution.save()
user_profile.save()
w niektórych przypadkach usunąć obiekt wkład wpis = user_profile.contributions_chosen.get (id = 1) user_profile.contributions_chosen.get (id = request.POST [ 'con contribution.delete()
Jak widać, modyfikuję tabelę contributions_chosen, więc muszę ponownie wystawić zapytanie i zaktualizować kontekst. Co robię źle?
UPDATE Po obejrzeniu swoje uwagi na temat oceny, uświadamiam sobie zrobić eval w queryset zrobić len (składki) pomiędzy kontekście [ „wkład”] i który wydaje się być problemem. Po prostu przeniesię to po operacji bazy danych i to wszystko, dzięki koleś.
Wydaje się, że nie oceniano queryset 'contributions', więc nie ma potrzeby martwić się o aktualizację, bo to jeszcze nie pobranych danych z DB. 'QuerySet' jest leniwy, dlatego nie ma nic wspólnego z wierszami DB, dopóki nie został oceniony. – okm