如何在一对多条件下,根据另一个相关表中的两个独立字段,在django中的单个查询中从查询集中排除数据
有两种模式,交易和支付。将有一个交易记录和两个付款记录。 支出记录中有两个标志:状态和转介。我需要获取支付记录状态为True、转介状态为False的交易记录 我试过以下方法如何在一对多条件下,根据另一个相关表中的两个独立字段,在django中的单个查询中从查询集中排除数据,django,conditional-statements,Django,Conditional Statements,有两种模式,交易和支付。将有一个交易记录和两个付款记录。 支出记录中有两个标志:状态和转介。我需要获取支付记录状态为True、转介状态为False的交易记录 我试过以下方法 queryset = queryset.exclude(payout_related_name__referral=False, payout_related_name__status=True) 此代码不包括第一个条件下的记录,而不是两种情况的组合 class Transaction(models.Model):
queryset = queryset.exclude(payout_related_name__referral=False, payout_related_name__status=True)
此代码不包括第一个条件下的记录,而不是两种情况的组合
class Transaction(models.Model):
booking = models.ForeignKey(Request, related_name='request_transaction', blank=False, null=False, on_delete=models.CASCADE)
amount = models.DecimalField('amount', max_digits=7, decimal_places=2, blank=False, null=False)
transaction_status = models.IntegerField('Transaction Status', choices=TRANSACTION_STATUS.choices(),
default=TRANSACTION_STATUS.pending, db_index=True)
source_id = models.CharField(max_length=120, blank=False, null=False)
created_date = models.DateTimeField('Created Date', auto_now_add=True)
class Payout(models.Model):
transaction = models.ForeignKey('Transaction', related_name='transaction_payout', on_delete=models.CASCADE)
status = models.IntegerField('Transaction Status', choices=PAYOUT_STATUS.choices(),
default=PAYOUT_STATUS.pending, db_index=True)
fund_payed_out = models.DecimalField('Fund Payed Out', max_digits=7, decimal_places=2)
referral_payout = models.BooleanField('Referral Payout', default=False)
您没有调用事务字段上设置的相关名称。尝试使用
交易\支出
相关名称将查询更新为
您正在筛选名为参考
的字段,但您的模型上没有具有该名称的字段。有一个字段的名称为转诊\u支付
接下来,您将使用值True
筛选状态字段,但它是一个IntegerField
字段。该字段永远不会返回True
。您必须根据付款状态进行筛选。true
如果您想查看一个付款记录,可以执行以下操作:
queryset = queryset.filter(transaction_payout__referral_payout=False, transaction_payout__status=PAYOUT_STATUS.true)
如果您想查看多个付款记录,可以执行以下操作:
from django.db.models import Q
# We use the Q method to filter with `OR`
queryset = queryset.filter(Q(transaction_payout__referral_payout=False) | Q(transaction_payout__status=PAYOUT_STATUS.true))
在查询中,您使用的是
exclude
。听起来你需要过滤器 请添加您的模型代码。请使用您的模型更新问题。更新问题此操作无效,因为付款表中有2条记录。transaction\u payout\u referral=False此查询将从列表中删除数据将查询更新为queryset=queryset.exclude后仍不工作(transaction\u payout\u referral\u payout=False,transaction\u payout\u status=1)基本查询集是什么样的(预订id=1025,预订请求状态=1,交易状态=1)。预回迁相关(“交易支付”)