将sql查询表单转换为django orm

时间:2015-02-19 08:34:10

标签: django

我有这样的模特:

class Person(models.Model):
    person_id=models.AutoField(primary_key=True)
    person_name=models.CharField(max_length=100)
    person_family=models.CharField(max_length=100)
    person_father=models.ForeignKey('Person', related_name='child_from_father',null=True)
    person_mother=models.ForeignKey('Person', related_name='child_from_mother',null=True)

def __str__(self):
    return self.person_family

class Car(models.Model):
    car_id=models.AutoField(primary_key=True)
    car_name=models.CharField(max_length=100)
    car_owner=models.ForeignKey(Person)

    def __str__(self):
        return self.car_name

有一些查询需要orm表单:

1: select person_name from Person
2: select * 
   from Person,Car
   where car_owner=person_id
3: select *
   from Person,Car
   group_by(person_name)

4: select *
   from Person,Car
   where name like %x%
   group_by(person_name)
   having car_id >= 2

最后你知道对orm的任何好评 请求帮助

1 个答案:

答案 0 :(得分:0)

我假设小组是为了订购。如果你真的想要group_by看看django中的聚合和注释。我猜你要找的是:

1:获取人员记录 - 从人员

中选择person_name
 person = Person.objects.get(<WHERE clause>).values('person_name')

2:选择*    来自人,汽车    car_owner = person_id

获取属于该人的汽车

cars = Car.objects.filter(car_owner = person)

3:选择*    来自人,汽车    GROUP_BY(PERSON_NAME)

获取按所有者分类的汽车列表

car_list = Car.objects.all().order_by('car_owner__person_name')

4:选择*    来自人,汽车    其中名称如%x%    GROUP_BY(PERSON_NAME)    car_id&gt; = 2

带搜索条件的汽车列表

car_list = Car.objects.filter(id__gte = 2, car_name__contains = "<search>").order_by('car_owner__person_name',)

汽车及其所有者

car_list = Car.objects.all().values('car_name','car_owner__person_name')