我有以下模型:
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
s与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'}}]