Django,ManyToMany字段,使用额外字段获取正确的对象

时间:2014-08-04 18:36:03

标签: python django manytomanyfield

我有2个模型:用户和汽车,我想为用户创建一个字段,用于保存用户汽车列表。我创建了3个类:

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()“function”,它返回所有汽车的列表。这是公平和良好的,除了它返回Car对象的外键列表而不是CarList对象(有额外的字段!!)

我知道我可以使用不同的查询,例如:CarList.objects.get(owner=user, car_type=user.cars.all()[0]), etc...,但这只是不方便。

那么有一个查询会给我“CarList”对象吗?

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您有一个用户,并且您想获得CarList。由于您有一个从CarList到User的ForeignKey,这是一个简单的向后关系:

carlists = user.carlist_set.all()

答案 1 :(得分:0)

是的,你可以,你只需要这样做:

result = Car.user_set.filter(your_query)

然后您可以从结果查询集

访问额外字段

您可以从Django Docs查看更好的示例:

extra-fields-on-many-to-many-relationships