django查询所有与过滤有关的集? [英] django query all with filtering on the related set?

查看:321
本文介绍了django查询所有与过滤有关的集?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

class Customer(models.Model):
  name = models.CharField(max_length=200)
  # ..


class CustomerTicket(models.Model):
  customer = models.OneToOneField(Customer)
  date = models.DateTimeField(auto_now_add=True)
  # ..

我想查询所有个客户.并且,如果在日期范围内有一个票证,则为每个客户添加票证-因此,只有在给定日期范围内的票证对象,我才能获取票证对象,否则票证字段为null.

I want to query all customers. And, adding for each customer its ticket if it has one in the date range - so I will get the ticket object only if it is in the given date range, otherwise the ticket field would be null.

推荐答案

尝试一下:

from django.db import models

customers = Customer.objects.select_related('customerticket').annotate(
    ticket=models.Case(models.When(models.Q(customerticket__date__gt=date1) & models.Q(customerticket__date__lt=date2), then=models.F('customerticket')))
)

然后您将获得ticket作为计算字段.请注意,当引用诸如ForeignKey或OneToOneField之类的关系字段时,F()返回主键值而不是模型实例,这意味着您的ticket字段将具有主键的值.

And you will get ticket as a computed field. Note that when referencing relational fields such as ForeignKey or OneToOneField, F() returns the primary key value rather than a model instance, which means your ticket field will have value of the primary key.

这篇关于django查询所有与过滤有关的集?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆