Python 在django中获取副本

Python 在django中获取副本,python,django,Python,Django,我的数据库中有一个名称字段,其中有相当多的名称是重复的。我想让它们独一无二。我知道我可以设置unique=True,但这只会对以后的条目有所帮助。我想知道当前所有名称重复的条目。有没有一种简单的方法可以打印出医生模型中所有重复的名字 class Doctor(models.Model): name = models.CharField(max_length=1300) 班主任(模特儿,模特儿): name=models.CharField(max_length=1300,unique=T

我的数据库中有一个名称字段,其中有相当多的名称是重复的。我想让它们独一无二。我知道我可以设置
unique=True
,但这只会对以后的条目有所帮助。我想知道当前所有名称重复的条目。有没有一种简单的方法可以打印出医生模型中所有重复的名字

class Doctor(models.Model):
   name = models.CharField(max_length=1300)
班主任(模特儿,模特儿): name=models.CharField(max_length=1300,unique=True)

博士班(models.Model):
name=models.CharField(max_length=1300,unique=True)

要清除数据库中的所有重复项,您必须先问自己一个问题-如何处理它们?去除以某种方式合并?更改每个副本的名称

回答这个问题后,只需构造数据迁移(使用RunPython迁移),即可对每个重复条目执行所需的操作

要查找所有重复项,可以执行以下操作:

from django.db.models import Count
with_duplicates = Doctor.objects.annotate(count=Count('id')).order_by('id').distinct('name').filter(count__gt=1)
该查询将首先从重复组的数据库(按id)记录中获取(例如,如果您有3个名为“who”的医生,它将首先获取其中的一个,并且只获取具有重复项的医生)

这样,对于每个有副本的医生,您可以获得副本列表:

with_duplicates = Doctor.objects.annotate(count=Count('id')).order_by('id').distinct('name').filter(count__gt=1)
for doctor in with_duplicates:
    duplicates = Doctor.objects.filter(name=doctor.name).exclude(id=doctor.id)

然后对它们做些什么。

要清除数据库中的所有重复项,您必须先问自己一个问题-如何处理它们?去除以某种方式合并?更改每个副本的名称

回答这个问题后,只需构造数据迁移(使用RunPython迁移),即可对每个重复条目执行所需的操作

要查找所有重复项,可以执行以下操作:

from django.db.models import Count
with_duplicates = Doctor.objects.annotate(count=Count('id')).order_by('id').distinct('name').filter(count__gt=1)
该查询将首先从重复组的数据库(按id)记录中获取(例如,如果您有3个名为“who”的医生,它将首先获取其中的一个,并且只获取具有重复项的医生)

这样,对于每个有副本的医生,您可以获得副本列表:

with_duplicates = Doctor.objects.annotate(count=Count('id')).order_by('id').distinct('name').filter(count__gt=1)
for doctor in with_duplicates:
    duplicates = Doctor.objects.filter(name=doctor.name).exclude(id=doctor.id)
请注意,
qs.distinct('fieldname')
在Sqlite后端尚不受支持。请注意,
qs.distinct('fieldname')
在Sqlite后端尚不受支持。