我有两张桌子:
如何在搜索产品时加入表“属性”2次?由于稍后分页,它们必须在一个查询中。
示例:搜索必须具有2个属性的产品 - 一个用于name=att1, value=value1
,另一个用于name=att2, value=value2
。
源代码:
class Product(models.Model):
product_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100, null=False)
class Attribute(models.Model):
attribute_id = models.AutoField(primary_key=True)
product = models.ForeignKey(Product, null=False)
name = models.CharField(max_length=100, null=False)
value = models.CharField(max_length=100, null=False)
无效的查询:
Product.objects.select_related().filter('attribute__name': 'n1', 'attribute__value':'v1').filter('attribute__name': 'n2', 'attribute__value':'v2')
答案 0 :(得分:1)
您不需要加入他们2次。您可以使用ForignKey创建模型,然后获取关联属性
的集合例如:
你创建这样的模型
class Product(models.Model):
name = models.CharField(max_length=100)
class Attribute(models.Model):
product = models.ForeignKey(Product)
name = models.CharField(max_length=100)
value = models.IntegerField()
您可以逐个获取产品
item = Product.objects.get(id=xxx)
然后获取与此项目相关的所有属性列表
from django.db.models import Q
attr = item.attribute_set.filter(Q(name='name1') | Q(name='name2'))
答案 1 :(得分:0)
使用类似的东西:
p = Product.objects.get(pk=1)
filtered = p.attribute_set.filter(name__in=['n1','n2'],value__in=['v1','v2'])