获取反向查找模型实例,而不重复Django中的父模型值



我有以下模型:

class Company(BaseModel):
name = models.CharField("Company Name", max_length = 200)
started_date = models.DateField()
class Car(BaseModel):
name = models.CharField("Car Name", max_length = 200)
display_name =  models.CharField("Brand Display Name", max_length=200, blank=True, null=True)
company = models.ForeignKey(Company, blank = True, null = True, on_delete=models.CASCADE, related_name="cars")

现在如果我像这样查询:

Company.objects.filter(started_date=some_date).values('id', 'name', 'cars__name')

我:

<QuerySet [{'id': 1, 'name': 'Ford', 'cars__name': 'Mustang'}, {'id': 1, 'name': 'Ford', 'cars__name': 'Shelby Mustang'}]>

但是我不希望每次都重复Company模型的值,因为有多个Cars与Company相关联。

我希望得到这样的值:

<QuerySet [{'id': 1, 'name': 'Ford', cars: { 'name': 'Mustang', 'name': 'Shelby Mustang'}}]>

我该怎么做呢?

你不能使用django过滤器或任何聚合器。相反,您可以像这样使用字典:

query_list = []
for each_company in Company.objects.filter(started_date=some_date):
result_dict = {}
result_dict['id'] = each_company.id
result_dict['name'] = each_company.name
result_dict['cars'] = {'name': x.name for x in Car.objects.filter(company=each_company)}
query_list.append(result_dict)

结果是一个字典列表:

query_list = [{'id': 1, 'name': 'Ford', 'cars': { 'name': 'Mustang', 'name': 'Shelby Mustang'}}, {'id': 2, 'name': 'Ferrari', 'cars': { 'name': '250 GTO', 'name': '125 S'}}]

最新更新