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

Get reverse lookup model instances without repeating the parent model values in 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 模型的值,因为有多个 CarCompany 关联。

我想得到这样的值:

<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'}}]