使用Django ORM过滤三个表

时间:2019-07-05 01:02:41

标签: django

  

我有3个django模型,其中第二个具有第一个的外键,而第三个具有第一个的外键。像这样:

    NewRegistration Model

    class NewRegistration(models.Model):
            registration_date = models.DateField()
            ward_no = models.ForeignKey(system_settings.models.Wardno)
            latitude = models.DecimalField(decimal_places=16, max_digits=30)
            longitude = models.DecimalField(decimal_places=16, max_digits=30)
            is_forwarded = models.BooleanField(default=False)
    Landowner Model

    class Landowner(models.Model):
        lo_address_roadname_en = models.TextField(max_length=100, null=True, blank=True)
        reg = models.ForeignKey(NewRegistration)
    Application  model

    class Application(models.Model):
        building_storey = models.IntegerField(blank=True, null=True, default=0)
        reg = models.ForeignKey(NewRegistration) 
  

我想基于具有土地所有者模型的lo_address_roadname_en和来自NewRegistration模型的某些ward_no以及具有来自NewRegistration模型的某些registration_date的no_of_storey来计数应用程序表的数据   我已经尝试过了。

 building_storey = Application.objects.filter(reg__ward_no=ward_no).filter(reg__registration_date__gte=start_date,reg__registration_date__lte=end_date).values('building_storey').annotate(Count('building_storey'))
            context['building_storey'] = building_storey
  

如何从三个表中进行过滤?请帮助我。

1 个答案:

答案 0 :(得分:0)

NewRegistration.objects.filter(
      registration_date__gt=${date},
      Landowner__lo_address_roadname_en=${lo_address_value},
      ward_no=${ward_no},
).values('Application__building_storey')

这是从3个表中过滤值的方法。