获取按类别分组的不同商店对象列表 - django

时间:2014-12-19 10:00:49

标签: django django-models

这就是我的模型的样子:

class Store(models.Model):
    name = models.CharField(unique=True, max_length=255)
    is_valid = models.IntegerField(default=0)
    default_link = models.TextField(default="")
    store_url = models.TextField(default="")

    def __str__(self):
        return self.name

class StoreCategory(models.Model):
    store = models.ForeignKey(Store)
    category = models.CharField(max_length=255, blank=True)
    sub_category = models.CharField(max_length=255, blank=True)

我想获取按类别分组的Store对象列表。例如,这是StoreCategory中的数据:

store | category    | sub_category
-----------------------------------
ABC   | Electronics | Laptops
ABC   | Electronics | Mobile Phones
PQR   | Food        | Food
PQR   | Fashion     | Men
XYZ   | Electronics | Laptops

输出应该是这样的:

{
    'Electronics': [ABC, XYZ],
    'Fashion' : [PQR],
    'Food': [PQR]
}

此处[ABC, XYZ]是商店对象,而不仅仅是他们的名字。

1 个答案:

答案 0 :(得分:0)

根据您提供的内容,我认为您应该使用ManyToManyField而不是ForeignKey。话虽如此:

def get_stores_by_cat():
    result = {}
    for sc in StoreCategory.objects.all():
        result[sc] = []
        for s in sc.store.all():
            result[sc].append(s)

    return result

或者更简洁地使用列表理解(在这种情况下,更多的是" dict"理解):

stores_by_cat = { sc: list(sc.store.all()) for sc in StoreCategory.objects.all() }