我正在使用 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