2

私はこのDjangoモデル(Django CMSから)を持っています:

class Placeholder(models.Model):
    slot = models.CharField(_("slot"), max_length=50, db_index=True)
    default_width = models.PositiveSmallIntegerField(_("width"), null=True)

'slot'値が重複しているプレースホルダーオブジェクトを削除し、それぞれの最初のオブジェクトのみを保持し、他のオブジェクトを削除したいと思います。

これを行うクエリを(Django QuerySet APIを使用して)作成するにはどうすればよいですか?

4

2 に答える 2

5

Torsten ソリューションを試すこともできますが、代わりに辞書を使用する方がはるかに高速です。

existing_slots = {}
for placeholder in Placeholder.objects.all():
    if existing_slots.get(placeholder.slot, False):
        placeholder.delete()
    else:
        existing_slots[placeholder.slot] = True
于 2011-12-01T20:45:15.767 に答える
4

このすべてを行う特定のクエリではなく、機能的なアプローチを行います。

existing_slots = []
for placeholder in Placeholder.objects.all():
    if placeholder.slot in existing_slots:
        placeholder.delete()
    else:
        existing_slots.append(placeholder.slot)
于 2011-03-30T03:11:29.943 に答える