下面给出的是零售店的模型。
class Rack(models.Model):
name = models.CharField(max_length=128)
number = models.PositiveSmallIntegerField()
categories = models.ManyToManyField(Category)
class Category(models.Model):
name = models.CharField(max_length=128)
code = models.CharField(max_length=3)
class Product(models.Model):
title = models.CharField(max_length=255)
in_stock = models.BooleanField(default=False)
categories = models.ManyToManyField(Category)
机架:产品库存的机架。 类别:产品的类别。 产品:产品
机架可以有多个类别,同一类别可以在多个机架上。 为了便于管理,我更喜欢在管理员的机架上选择类别,所以我更喜欢这种设计。
如果有一个机架,比如No.1,我如何查询给定机架上的产品?
>> Rack.objects.get(number=1).categories.all()
[<Category: Fruits>, <Category: Vegetables>]
我不想迭代此查询集,但要进行查询以返回对象。
我的问题是,如何查询机架 上的对象尽可能优化 ?
以便查询必须返回对象列表。
>> Rack.objects.filter( * code here to get the objects in the rack 1 * ) must returns the objects on the rack 1
[<Product: Apple>, <Product: Orange>, <Product: Cucumber>, <Product: Carrot>, <Product: Green Chillie>, <Product: Onion>, <Product: Grapes> ]
由于
答案 0 :(得分:1)
您最好的选择可能是使用through model。如果你不想这样做,我会尝试这样的事情:
categories = Rack.objects.get(number=1).categories.all().values_list('name', flat=True)
Product.objects.filter(categories__name__in=categories)
另外,你的意思是:
class Product(models.Model):
...
Category = models.ManyToManyField(Category)
是:
class Product(models.Model):
...
categories = models.ManyToManyField(Category)
就像你的Rack
模特一样?