Как использовать набор запросов django для получения списка пользователей из таблицы MyUser, где в моей таблице UserBankTransaction значение transaction_paid равно False?
class UserBankTransaction(models.Model):
user = models.ForeignKey(MyUser)
plaid_transaction_id = models.CharField(max_length=300, unique=True)
charge_amount = models.DecimalField(max_digits=10, decimal_places=2)
account_id = models.CharField(max_length=300)
location_name = models.CharField(blank=True, max_length=300)
roundup_amount = models.DecimalField(max_digits=10, decimal_places=2, null=True)
transaction_date = models.DateField()
transaction_paid = models.BooleanField(default=False)
created_date = models.DateTimeField(auto_now=False, auto_now_add=True)
class MyUser(AbstractBaseUser):
username = models.CharField(max_length=255,unique=True,)
email = models.EmailField(verbose_name='email address',max_length=255,unique=True)
first_name = models.CharField(max_length=120,null=True,blank=True,)
last_name = models.CharField(max_length=120,null=True, blank=True,)
created = models.DateTimeField(auto_now_add=True, null=True, blank=True)
updated = models.DateTimeField(auto_now=True, null=True, blank=True)
Пользователи с неоплаченными транзакциями @Willem Van Onsem
Заголовок этого сообщения должен быть «как мне отфильтровать связанный объект», если вы на самом деле не запрашиваете модель транзакции ...
Запросы с обратной связью будут делать:
MyUser.objects.filter(userbanktransaction_set__transaction_paid=False)
Я получаю следующую ошибку - FieldError: Cannot resolve keyword 'userbanktransaction_set' into field. Choices are: created, email, first_name, id, is_active, is_admin, is_member, last_login, last_name, logentry, password, payment, paymentdata, pledge, updated, useralert, userbanktransaction, userchapter, userfinance, username, userprofile, userschool
Похоже, что имя обратного просмотра по умолчанию не имеет суффикса _set
, как я помнил. Попробуйте вместо этого: MyUser.objects.filter(userbanktransaction__transaction_paid=False)
и как лучше всего фильтровать транзакции по дате, например, только те, которые произошли за последние 10 дней?
Я знаю, что могу сначала отфильтровать транзакции, затем получить список идентификаторов пользователей и из этого запросить модель MyUser, но мне любопытно узнать, есть ли еще один ват
Если вы собираетесь получить список идентификаторов пользователей:
UserBankTransaction.objects \
.filter(transaction_paid=False)\
.values_list('user', flat=True)
Если вы собираетесь получить список пользовательских объектов:
MyUser.objects.filter(userbanktransaction_set__transaction_paid=False)
или вы можете указать related_name
в UserBankTransaction.user
:
class UserBankTransaction(models.Model):
user = models.ForeignKey(MyUser, related_name='bank_transactions')
тогда вы можете просто сделать это:
MyUser.objects.filter(bank_transactions__transaction_paid=False)
Что делать, если транзакций несколько? Вы хотите, чтобы пользователи с неоплаченными транзакциями все или неоплаченными транзакциями любой?