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

cof*_*der 2 django django-queryset django-cms 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)
Run Code Online (Sandbox Code Playgroud)

我想删除带有重复'slot'值的Placeholder对象,只保留每个对象的第一个并删除其他对象.

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

小智 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
Run Code Online (Sandbox Code Playgroud)

  • 在使用它时,为什么不使用`set()`并删除`True`。如果您追求效率,那么从内存的角度来看,set()的效率要比字典高。 (2认同)