django.db.utils.IntegrityError: UNIQUE constraint failed: ne



我试图改变null = FalseUnique = True在EmailField和它开始给我这个错误后:django.db.utils.IntegrityError: UNIQUE constraint failed: new__main_doctor.email我已经运行命令makemigrationsmigrate,但它仍然给我这个错误。我试着撤消这些,然后运行命令,但它仍然给我错误。

这是我的models.py文件
from django.db import models
from phonenumber_field.modelfields import PhoneNumberField
import os 
# Create your models here.
import datetime
def get_file_path(request, filename):
filename_original = filename
nowTime = datetime.datetime.now().strftime('%Y%m%d%H:%M:%S')
filename = "%s%s" % (nowTime, filename_original)
return os.path.join('uploads/', filename)


class Doctor(models.Model):
name = models.CharField(max_length=20)
phone_number = PhoneNumberField(null=False, blank=False, unique=True)
email = models.EmailField(null=False, unique=True, max_length=100)
city = models.CharField(max_length=100)
speciality =  models.CharField(max_length=50)
doc_image = models.ImageField(upload_to = get_file_path ,null = False, blank = False)
kycdocument = models.ImageField(upload_to = get_file_path, null = False, blank = False)


class Department(models.Model):
dept_name = models.CharField(max_length=20)
dept_Email = models.EmailField(max_length=100)
dept_password = models.CharField(max_length=200)

这里是forms.py文件

from django import forms
from .models import Doctor,Department


class Doctorslist(forms.ModelForm):
class Meta:
model = Doctor
fields = ('name','phone_number','email', 'city', 'speciality', 'doc_image', 'kycdocument')
# widgets = {
#     'name':  forms.TextInput(attrs = {'class': 'form-control'}),
#     'email':  forms.EmailInput(attrs={'class': 'form-control'}),
#     'city':  forms.CharField(attrs={'class': 'form-control'}),
#     'speciality': forms.CharField(attrs={'class': 'form-control'}),
# }   


class Departmentform(forms.ModelForm):
class Meta:
model = Department
fields = ('dept_name','dept_Email','dept_password')
widgets = {'dept_password': forms.PasswordInput()}

这是错误
(env) C:UsersLenovoDocumentsDjangoPracticeProjectshospitalmanagement>python manage.py migrate        
Operations to perform:
Apply all migrations: admin, auth, contenttypes, main, sessions
Running migrations:
Applying main.0008_auto_20211014_0005...Traceback (most recent call last):
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendssqlite3base.py", line 413, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: UNIQUE constraint failed: new__main_doctor.email
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangocoremanagement__init__.py", line 401, in execute_from_command_line
utility.execute()
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangocoremanagement__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangocoremanagementbase.py", line 330, in run_from_argv
self.execute(*args, **cmd_options)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangocoremanagementbase.py", line 371, in execute
output = self.handle(*args, **options)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangocoremanagementbase.py", line 85, in wrapped
res = handle_func(*args, **kwargs)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangocoremanagementcommandsmigrate.py", line 243, in handle
post_migrate_state = executor.migrate(
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbmigrationsexecutor.py", line 117, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbmigrationsexecutor.py", line 147, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbmigrationsexecutor.py", line 227, in apply_migration
state = migration.apply(state, schema_editor)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbmigrationsmigration.py", line 124, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbmigrationsoperationsfields.py", line 236, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendssqlite3schema.py", line 138, in alter_field
super().alter_field(model, old_field, new_field, strict=strict)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendsbaseschema.py", line 571, in alter_field
self._alter_field(model, old_field, new_field, old_type, new_type,
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendssqlite3schema.py", line 360, in _alter_field
self._remake_table(model, alter_field=(old_field, new_field))
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendssqlite3schema.py", line 283, in _remake_table
self.execute("INSERT INTO %s (%s) SELECT %s FROM %s" % (
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendsbaseschema.py", line 142, in execute
cursor.execute(sql, params)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendsutils.py", line 98, in execute
return super().execute(sql, params)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendsutils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendsutils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbutils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersLenovoDocumentsDjangoPracticeProjectsblog_projectenvlibsite-packagesdjangodbbackendssqlite3base.py", line 413, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: UNIQUE constraint failed: new__main_doctor.email

这是因为,在你的DB的旧数据中,你有重复的邮件。您可以删除所有旧数据或找到重复的数据并更改它们。