0

Djangoには、カテゴリと製品の2つのモデルがあり、製品はこのようにカテゴリを参照しています。

class Category(models.Model):
    name = models.CharField(max_length=255)

class Product(models.Model):
    category = models.ForeignKey(Category, null=True)

少なくとも 1 つの製品によって参照されるすべてのカテゴリを取得したいと考えています。

このソリューションで目標を達成しました:

class Category(models.Model):
        name = models.CharField(max_length=255)

        def has_product(self):
             products = self.product_set.all()
             if(len(products) > 0):
                   return True
             else:
                   return False

category_list = []

for cat in Category.objects.all(): 
        if cat.has_products():
             category_list.append(cat)

よりスマートなソリューションはありますか?

4

2 に答える 2

2

単一のリスト内包表記でそれを実行できるようです:

cats_with_prod = [c for c in Category.objects.all() if c.product_set.exists()]
于 2013-03-11T20:31:39.387 に答える
2

リスト内包表記でそれを行うことができます:

cats_with_prod = [c for c in Category.objects.all() if c.product_set.exists()]

ただし、DB 内で 1 つのクエリで完全に実行できます。

cats_with_prod = Category.objects.filter(product_set__isnull=False).distinct()
于 2013-03-11T20:35:14.147 に答える