假设我有以下型号:
class Manufacturer(Model):
name = models.CharField(max_length=255)
origin = models.CharField(max_length=255)
class Car(Model):
model = models.CharField(max_length=255)
manf = models.ForeignKey(Manufacturer, related_name="cars")
然后我想运行以下查询:
usa_manfs = Manufacturer.objects.filter(origin='USA')
usa_manf_cars = Car.objects.filter(manf__in=usa_manfs)
但是,我只想在 QuerySet 中为每个制造商提供 1 辆汽车。
我知道我可以走另一条路并做类似的事情,usa_manfs.cars[0]
但这是否意味着我需要为每个制造商查询以获取所有相关汽车?
澄清一下,我不需要对与每个制造商相关的 Car 实例进行任何控制。我只需要最后列出制造商唯一的汽车列表。
现在的解决方案
经过深思熟虑,我决定采用 Python 解决方案并防止循环中的重复。
我正在使用的数据可能在 ForeignKey 字段中的重复项相对较少(我的示例可能不支持),并且由于我无法获得将其保留在 Django ORM 中的解决方案,因此我'将简单地跟踪 ForeignKey 并在循环中排除重复。因为无论如何我都在循环它们,所以我认为我总体上不会创造更多的工作。
例如:
cars = list(Car.objects.all())
final_list = []
used_before = []
for car in cars:
if not car.manf_id in used_before:
used_before.append(car.manf_id)
doStuff(car)
final_list.append(car)
如果出现更好的解决方案,我会接受。