django 查询所有相关集的过滤?

use*_*803 5 django orm django-models models

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)
  # ..
Run Code Online (Sandbox Code Playgroud)

我想查询所有客户。并且,如果它在日期范围内有一张票,则为每个客户添加它的票 - 所以只有当它在给定的日期范围内时,我才会获取票对象,否则票字段将为空。

nev*_*ner 0

要通过一次查询获取具有相关票证的客户,您可以使用select_related. 要制作复杂的条件,您可以使用Q

from django.db.models import Q    
Customer.objects.select_related('customerticket').filter(Q(customerticket__date__range=["2018-04-11", "2018-04-12"]) | Q(customerticket__isnull=True))
Run Code Online (Sandbox Code Playgroud)

这将按客户票日期过滤数据。