使用非相关模型的 Django 查询对象

Django query objects using non related models

我有这 3 个模型:

class Person(models.Model):
  name
  age

class Person_Address(models.Model):
  address
  number
  city
  state
  person = models.ForeignKey(Person)

class State_Schedules(models.Model):
  state
  hour

我还有一个 models.QuerySet 用于 State_Schedules 用于根据当前时间过滤(基本上是下面的 contactables())。

我怎样才能得到 Person 对象来比较它在 django 中的 state

我试过了,但是使用他们的 Person_Address.

获取 Persons 似乎很麻烦
persons = Person_Address.objects.select_related('person').filter(
  state__in=(
    _.state for _ in State_Schedules.objects.contactables()
  )
)

如果我可以访问 Person_Address 关联作为 Person 过滤器的关键字,这应该很容易,但我还没有找到如何做到这一点。

是否有更好的方法,或者我必须求助于 raw sql?

Person_AddressPerson有一个外键,所以可以按反向关系进行过滤。使用双下划线符号过滤 Person_Address 模型中的字段。

states = [_.state for _ in State_Schedules.objects.contactables()]
people = Person.objects.filter(person_address__state__in=states)