Django - 按参数过滤对象

时间:2011-10-07 06:48:19

标签: django django-models

有产品目录,产品具有属性...想要按属性过滤产品。

class Product(models.Model):
    name = models.CharField(verbose_name="Название",max_length=255)
    description = models.TextField(verbose_name="Описание")
    category = models.ManyToManyField(Category,verbose_name=("Категория"))

class Product_Attribute(models.Model):
    product = models.ForeignKey(Product)
    option = models.ForeignKey(Attribute_Option)
    value = models.CharField(verbose_name=("Value"), max_length=255)

class Attribute_Option(models.Model):
    description = models.CharField(verbose_name=("Description"), max_length=100)
    name = models.SlugField(verbose_name=("Attribute name"), max_length=100)

我想过滤两个或更多属性

1 个答案:

答案 0 :(得分:1)

您希望过滤Product对象的属性的原始问题非常模糊。如果您想要与特定Attribute_Option.description值相关的所有Product对象,可以使用:

attribute_options = Attribute_Option.objects.get(description='foo')
product_attributes = Product_Attribute.objects.select_related('Product').filter(option__in=attribute_options)
results = [p.product for p in product_attributes]

如果您只想要所有具有特定名称和特定描述的Product对象,则可以使用:

Product.objects.filter(name='foo', description='bar')

我真的不知道您尝试过滤哪些属性。如果您在问题中指定了该问题,则可能会得到与您的特定用例相匹配的答案。