Django, Queryset существует, но доступ к [0] приводит к ошибке индекса - PullRequest
0 голосов
/ 05 декабря 2018
     creator_payouts = self.filter(paid=False)
     processed_user_ids = []

     if not creator_payouts.exists():   // here I check the existence
         return

     for creator_payout in creator_payouts:
         do_something()

     creator_payouts.update(paid=True)  // maybe this does something?

     CreatorRecord.objects.filter(
         user__in=processed_user_ids,
         created_for__lte=creator_payouts[0].created_for // error here
     ).update(processed_for_payout=True)

Я получаю ошибку индекса в creator_payouts[0] в конце кода выше.

Почему я получаю ошибку, особенно я исключаю случай пустого списка из-за условия creator_payouts.exists()выше

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

creator_payouts - это набор запросов.Если хотите, то лучше сначала попробуйте creator_payouts.first() вместо creator_payouts[0].

 CreatorRecord.objects.filter(
     user__in=processed_user_ids,
     created_for__lte=creator_payouts.first().created_for
 ).update(processed_for_payout=True)
0 голосов
/ 05 декабря 2018

Хорошо, когда вы обновляете creator_payouts, тогда база данных обновляется до paid=True.Поскольку creator_payouts это ленивый набор запросов, и когда вы вызываете creator_payouts[0] для его оценки, он получает пустой набор запросов.Таким образом, вы должны хранить начальные значения где-то с принудительной оценки.Например:

if not creator_payouts.exists():   // here I check the existence
         return

for creator_payout in creator_payouts:
    # or store the first creator_payout in a variable here
    do_something()

unpaid_creator_payouts_list = list(creator_payouts)  # force evaluation

creator_payouts.update(paid=True)


 CreatorRecord.objects.filter(
         user__in=processed_user_ids,
         created_for__lte=unpaid_creator_payouts_list[0].created_for // or use the first stored payout_creator in previous loop
     ).update(processed_for_payout=True)

Или запустите операцию обновления после CreatorRecord фильтра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...