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 に一意のスラッグを持つオブジェクトのみを取得する方法は?

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 をサポートしていません。ここで説明されているremove-duplicates関数に固執する必要があります:(

于 2012-05-11T23:08:45.713 に答える