假设我有以下两种模式:
class Person(models.Model):
"""
A person model with the name of the person.
"""
name = models.CharField()
class Vehicle(models.Model):
"""
A vehicle model with the owner of the vehicle, and the type of the vehicle.
A vehicle type could be a car, a truck or a bike.
"""
owner = Models.ForeignKey(Person, related_name='vehicles')
type = models.CharField()
使用这两个模型,Django将自动创建一个向后关系,通过以下查询可以访问一个人的所有车辆:
person = Person.objects.get(pk=1)
person.vehicles.all()
这将返回与该人相关的所有车辆,到目前为止一切顺利。
现在假设我想要过滤车辆的人物对象,说我只想要自行车类型的车辆。我怎么能这样做?
要将问题放在上下文中,我正在尝试构建以下网址:
api.example.com/v1/person/1/vehicles/ [returns all vehicles]
api.example.com/v1/person/1/vehicles/?type=bike [returns only vehicles of type bike]
谢谢。
答案 0 :(得分:4)
person.vehicles.filter(type='Bike')
顺便说一下,使用type
作为字段名称并不好,因为它是一个python保留关键字。请尝试改为vehicle_type
。
修改强>
如果你想要人物对象,请执行:
Person.objects.filter(vehicles__type="Bike")
检查django doc chaining filters。
<强>重新编辑:强>
要获得一个人拥有的自行车,你可以:
person = Person.objects.get(pk=1)
all_bikes = person.vehicles.filter(type="Bike")