Django - 使用queryset

时间:2017-04-22 15:00:06

标签: python django django-models django-queryset

我的模特目前看起来像这样:

class Dealer(models.Model):
    name = models.CharField(unique=True, max_length=255, default='')
    url = models.URLField()

    def __str__(self):
        return self.name


class Category(models.Model):
    name = models.CharField(unique=True, max_length=255, default='')

    def __str__(self):
        return self.name


class Car(models.Model):
    name = models.CharField(unique=False, max_length=255,default='')
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Price(models.Model):
    car = models.ForeignKey(Car, default='')
    dealer = models.ForeignKey(Dealer, default='')
    price = models.DecimalField(max_digits=9, decimal_places=2)
    url = models.URLField(max_length=255)

    def __str__(self):
        return str(self.price)

我希望能够做的是回答以下问题(最终会成为我观点的背景): 向我显示特定类别中可在不同经销商处获得的汽车列表及其价格。我用于测试的查询是这样的:

carprice = Price.objects.filter(car__category='1').values('car__name','price','dealer__name').order_by('car__name')

生成的QuerySet如下所示:

<QuerySet [{'car__name': 'Audi Model A', 'price': Decimal('32000.00'), 'dealer__name': 'Dealer A'}, {'car__name': 'Audi Model A', 'price': Decimal('35000.00'), 'dealer__name': 'Dealer B'}, {'car__name': 'Audi Model A', 'price': Decimal('35000.00'), 'dealer__name': 'Dealer C'}, '...(remaining elements truncated)...']>

问题1:是否可以修改查询,以便QuerySet不会每次都重复car__name,而是通过car__name对价格和经销商进行分组?如果有人能指出我在QuerySets上的一个很好的教程/文档,我将非常感激。我试过看Django的文档,但是找不到这个问题的答案。

- Audi Model A
    - Dealer A 32000.00
    - Dealer B 35000.00
    - Dealer C 35000.00

问题2:使用当前查询,如何在视图函数中完成分组以实现上述目的?

1 个答案:

答案 0 :(得分:0)

对于访问此页面寻找答案的人来说,这是我能想到的最好的结果:

问题1 : 基于我对Django文档的评论以及我与另一个Django开发人员的交互,答案是(可能)没有。

问题2 : 答案是:重新组合模板标签。 Reference