Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一对多条件下,根据另一个相关表中的两个独立字段,在django中的单个查询中从查询集中排除数据_Django_Conditional Statements - Fatal编程技术网

如何在一对多条件下,根据另一个相关表中的两个独立字段,在django中的单个查询中从查询集中排除数据

如何在一对多条件下,根据另一个相关表中的两个独立字段,在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):

有两种模式,交易和支付。将有一个交易记录和两个付款记录。 支出记录中有两个标志:状态和转介。我需要获取支付记录状态为True、转介状态为False的交易记录

我试过以下方法

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)。预回迁相关(“交易支付”)