型号:
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') - 但没有运气