django prefetch_related 用对象列过滤

问题描述 投票:0回答:0

型号:

class Person(models.Model):
    birth_date = models.DateField()

class PersonData(models.Model):
    (...)
    last_name = models.CharField(max_length=255)
    valid_from = models.DateField() #default data urodzenia (Person)
    valid_to = models.DateField(default=date(year=2999,month=12,day=31))
    
class Transaction(models.Model): 
    person = models.ForeignKey(Person, on_delete=models.RESTRICT)
    (...)

现在我想获取 context_date 之前的交易:

context={}
context[context_date]=date.today()
    
transactions = Transaction.objects.filter(
    execution_date__lte=context['context_date']
).prefetch_related.prefetch_related(
    Prefetch(
        'person__persondata_set',
        queryset=PersonData.objects.filter(
            valid_to__gte=context['context_date'],
            valid_from__lte=context['context_date']
        )
    )
)

但这是不合适的——因为预取数据在全局 context_date 中使用。我想要名称与 transaction.execution_date 而不是 context_date 相关!

Transaction.objects.filter(
    execution_date__lte=context['context_date']
).prefetch_related.prefetch_related(
    Prefetch(
        'person__persondata_set',
        queryset=PersonData.objects.filter(
            valid_to__gte=execution_date,
            valid_from__lte=execution_date
        )
    )
)

这当然是错误的......我试过 Q('execution_date'), F('execution_date') - 但没有运气

django django-queryset
© www.soinside.com 2019 - 2024. All rights reserved.