0

我正在使用 Django 1.3,并希望使用“分组依据”类型的查询来获取对象数组。这是一些简化的代码:

class Product(models.Model):
    id       = models.IntegerField(primary_key=True)
    active   = models.BooleanField()
    name     = models.CharField(blank=True, max_length=500)
    slug     = models.SlugField(blank=True, max_length=500)
    program  = models.CharField(blank=True, max_length=500)
    number   = models.CharField(blank=True, max_length=500)
    image    = ...
    url      = ...

在外壳中:

>>> p = Product.objects.all().some_group_functions('slug')
>>> p
[<Product: Abelly Hat>, <Product: Abelt Bracelet>, <Product: Abigail Earrings>, <Product: Abigail Earrings>'...(remaining elements truncated)...']

如何在我的变量 p 中仅获取具有唯一 slug 的对象?

有没有办法将Product 对象作为列表获取?

编辑:可能的解决方法 虽然它可以满足我的要求,但如果您有更好的解决方案,请告诉我:

在我看来,逻辑得到一个对象 QuerySet:

products   = Product.objects.filter(*whatever filter you like*)
products   = remove_duplicates(products, 'slug')

和 remove_duplicates 功能

def remove_duplicates(seq, attr=None):
    seen   = {}
    result = []
    for item in seq:
       if attr:
           tmpattr = getattr(item, attr)
       else:
           tmpattr = item

       if tmpattr in seen: continue
       seen[tmpattr] = 1
       result.append(item)
return result
4

1 回答 1

0

由于没有人回答了,我想没有比升级到支持功能 distinct([fields]); 的 django 1.4 更简单的方法了。django 1.3 只支持函数 distinct(),没有参数。

我尝试升级,但是 django-cms 直到今天还不支持 django 1.4。我将不得不坚持这里解释的删除重复功能:(

于 2012-05-11T23:08:45.713 回答