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后端尚不受支持。