django查询模型A并从相关模型B中排除某些项
我是Django的新手,我面临着一个在Stackoverflow上没有答案的问题。 基本上,我有两种型号,客户和订单定义如下:django查询模型A并从相关模型B中排除某些项,django,django-models,orm,model,Django,Django Models,Orm,Model,我是Django的新手,我面临着一个在Stackoverflow上没有答案的问题。 基本上,我有两种型号,客户和订单定义如下: class Client(models.Model): name = models.CharField(max_length=200) registration_date = models.DateTimeField(default=timezone.now) # .. class Order(models.Model): Client = mode
class Client(models.Model):
name = models.CharField(max_length=200)
registration_date = models.DateTimeField(default=timezone.now)
# ..
class Order(models.Model):
Client = models.ForeignKey(ModelA, on_delete=models.CASCADE, related_name='orders')
is_delivered = models.BooleanField(default=False)
order_date = models.DateTimeField(default=timezone.now)
# ..
我希望我的查询集客户端\u结果
满足以下两个条件:
- 客户端对象满足某些条件(例如,它们的名称以“d”开头,并在2019年注册,但可能更复杂)
- 我可以使用“related_name”中定义的
关系访问的Order对象仅是满足其他条件的对象;例如,订单未交付且在过去6周内完成orders
客户机的相关未交付订单
,并将其存储在客户机
中,但随后存储在不同的属性中,因为否则会产生混淆
因此,您可以创建一个查询集,如:
from django.db.models import Prefetch
from django.utils.timezone import now
from datetime import timedelta
last_six_weeks = now() - timedelta(days=42)
clients_results = Client.objects.filter(
name__startswith='d'
).prefetch_related(
Prefetch(
'orders',
Order.objects.filter(is_delivered=False, order_date__gte=last_six_weeks),
to_attr='nondelivered_orders'
)
)
从django.db.models导入预取
从django.utils.timezone立即导入
从日期时间导入时间增量
最近六周=现在()-timedelta(天=42)
clients\u results=Client.objects.filter(
名称\uuu以='d'开头
).prefetch_相关(
预取(
“命令”,
Order.objects.filter(是否已交付=False,订单日期=最后六周),
发送至\u attr='未交货订单'
)
)
这将包含名称以'd'
开头的所有客户机
,由此查询集生成的每个客户机
对象将具有一个属性未交付的订单
,该属性包含过去42天内未交付和订购的订单列表