Django 多对多字段,获取带额外字段的正确对象
我有两个模型:用户(User)和汽车(Car),我想为用户创建一个字段,用来保存用户的汽车列表。我创建了三个类:
class Car():
type = ...
class User():
name = ...
cars = models.ManyToManyField(Car, through='CarList')
class CarList():
owner = models.ForeignKey(User)
car_type = models.ForeignKey(Car)
extra_field = ...
extra_field2 = ...
现在,当我想获取用户的汽车时,可以使用 User.cars.all() 这个“函数”,它会返回用户所有汽车的列表。这听起来没问题,但它返回的是汽车对象的外键列表,而不是包含额外信息的 CarList 对象。
我知道我可以使用其他查询,比如:CarList.objects.get(owner=user, car_type=user.cars.all()[0]), 等等...
,但这样做很麻烦。
那么有没有什么查询可以直接给我“CarList”对象呢?
2 个回答
0
是的,你可以这样做,你只需要执行:
result = Car.user_set.filter(your_query)
然后你就可以从结果查询集中访问额外的字段了。
你可以查看Django文档,里面有更好的例子:
3
如果我理解得没错,你有一个用户(User),然后你想获取这个用户的汽车列表(CarList)。因为汽车列表和用户之间有一个外键关系(ForeignKey),所以这其实是一个简单的反向关系。
carlists = user.carlist_set.all()