说我有以下车型(任意)记录:查询集只得到一个为每个外键
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实例。我只需要最终列出制造商独特的汽车列表。
解NOW
想来想去,我决定去一个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)
如果一个更好的解决方案走来,我会接受的吧。
为什么不只是得到所有的'汽车'?一辆车只能有1个制造商吗? – 2013-04-23 07:43:58
我不希望重复制造商,所有汽车不能保证。 – DanH 2013-04-23 07:57:41