Django 多对多字段,获取带额外字段的正确对象

2 投票
2 回答
1197 浏览
提问于 2025-04-18 15:58

我有两个模型:用户(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()

撰写回答