删除特定字段中具有重复值的Django QuerySet对象

时间:2011-03-30 01:34:45

标签: django django-cms django-queryset django-shell

我有这个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'值的Placeholder对象,只保留每个对象的第一个并删除其他对象。

如何编写执行此操作的查询(使用Django QuerySet API)?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

我会做一个功能性的方法,而不是一个完成所有这一切的特定查询:

existing_slots = []
for placeholder in Placeholder.objects.all():
    if placeholder.slot in existing_slots:
        placeholder.delete()
    else:
        existing_slots.append(placeholder.slot)