Повторно оцените запрос django после внесения изменений в базу данных.

Я получил этот длинный оператор запроса в представлении

    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')

, которое я использую в своем шаблоне

context['contributions'] = contributions

И позже в этом представлении я вношу изменения (добавляю или удаляю запись) в table posts_chosen, и если я хочу, чтобы мой контекст ['contributions'] обновлялся, мне нужно повторно запросить базу данных с тем же длинным запросом.

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')

А затем снова обновите мой контекст

context['contributions'] = contributions

Поэтому мне было интересно, есть ли способ избежать повторения самого себя, чтобы переоценить вклад, чтобы он действительно отражал реальные данные в базе данных. В идеале я бы изменил вклад набора запросов, и его значения были бы обновлены, и в то же время база данных отражала бы эти изменения, но я не знаю, как это сделать.

ОБНОВЛЕНИЕ: Это то, что я делаю между двумя контекст['вклады'] = вклады

Я добавляю новый объект вклада в posts_chosen (это отношение m2m),

contribution = Contribution.objects.create(kwarg=something,kwarg2=somethingelse)
user_profile.contributions_chosen.add(contribution) 
contribution.save()
user_profile.save()

И в некоторых случаях я удаляю объект вклада вклад = user_profile.contributions_chosen.get (id = 1) user_profile.contributions_chosen.get(id=request.POST['con вклад.delete()

Как видите, я изменяю таблицу posts_chosen, поэтому мне нужно повторно выполнить запрос и обновить контекст.Что я делаю неправильно?

ОБНОВЛЕНИЕ Увидев ваши комментарии об оценке, я понимаю, что оцениваю набор запросов, который делаю. len(contributions) между context['contribution'] и это кажется проблемой. Я просто перенесу его после операций с базой данных и все, спасибо, парень.

6
задан Guillermo Siliceo Trueba 3 May 2012 в 18:56
поделиться