【问题标题】:'ValuesListQuerySet' object has no attribute 'group_by'“ValuesListQuerySet”对象没有属性“group_by”
【发布时间】:2016-04-03 00:41:50
【问题描述】:

我正在尝试根据商店显示商店产品的尺寸和颜色:

store1: sizes=S,M,L colors=Red,blue

store2: sizes=L,Xl  colors=yellow,green

我尝试将values_listgroup_by 一起使用,但它会引发错误

“ValuesListQuerySet”对象没有属性“group_by”

似乎group_by 不是 django 的一部分。我该怎么做才能将我的查询按上述方式分组?

models.py

商店包含的产品可以具有不同的尺寸和颜色。同样,一种产品可以在多个商店中销售。

class StoreProduct(models.Model):
    product = models.ForeignKey('products.Product')
    category = models.ForeignKey('products.Category')
    store = models.ForeignKey('Store')
    price = models.IntegerField(null=True , blank=True)
    quantity = models.IntegerField(null=True , blank=True)
    sizes = models.CharField(max_length=50 , null=True , blank=True)
    colors = models.CharField(max_length=50 , null=True , blank=True)

    def __unicode__(self):
        return self.product.title


class Store(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL , null=True , blank=True)
    StoreName = models.CharField(max_length=50 , default = '')
    items = models.ManyToManyField('products.Product', through=StoreProduct)
    brand = models.ForeignKey('products.Brand' , null=True , blank=True)
    City = models.CharField(max_length=50 , default = '')
    Area = models.CharField(max_length=50 , default = '')
    Address = models.TextField(max_length=500)
    MallName = models.CharField(max_length=50 , null=True , blank=True)
    slug = models.SlugField(blank=True ,unique=True)

views.py

 StoreProduct.objects.filter(product=productobj) \
   .values_list('sizes', flat=True) \
   .group_by('store')

【问题讨论】:

  • 那么在上述场景中我如何根据商店对尺寸进行分组
  • 有两种方法可以使用aggregateannotate 但首先要考虑你的sql: SELECT sizes FROM StoreProduct GROUP BY store Do you think it's valid?
  • 为什么无效?那么如何根据商店显示尺寸?
  • 一家商店包含的产品可以具有不同的尺寸和颜色……同样,一种产品可以在多个商店中购买……所以我们不能显示哪个商店的尺寸和颜色为特定产品?
  • 我的数据库设计有什么问题吗?

标签: django database-design django-models django-views database-schema


【解决方案1】:

您的StoreProduct 代表特定商店中的Product,因此要获得“显示哪个商店有特定产品的尺寸和颜色”,您应该查询Product。比如:

p1=products.Product() #object representing your particular product p1.storeproducts_set.all().value_list('store','sizes','colors')

在评估时 thish 应该返回一个元组列表,其中包含产品p1 的“which store has which sizes and color”。

【讨论】:

  • 很高兴能帮到你。如果它有效,您可能希望将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多