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)

我想删除具有重复“插槽”值的占位符对象,只保留每个对象中的第一个并删除其他对象。

如何编写执行此操作的查询(使用 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 回答