获取反向查找模型实例而不重复 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
模型的值,因为有多个 Car
与 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'}}]
我有以下型号:
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
模型的值,因为有多个 Car
与 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'}}]