Django IntegrityError with uuid as primaryKey
好的,这就是解释的行为。
1。我通过管理面板创建了一个新的
2。对象已保存。
3。之后再创建一个
4。取得错误
django.db.utils.IntegrityError: duplicate key value violates unique
constraint"lp_post_pkey" DETAIL: Key
(id)=(5de7b062-14b2-42ef-a9ee-95bbb17ccf3b) already exists.
我读取了重复的键值,违反了django中的唯一约束。
问题可能与我正在使用的表中的主键序列不同步相同。解决方案是将电流
但是我使用uuid作为主键,这可能不是我的解决方案。
那么,如果问题确实出在那,我该如何同步我的主键?
顺便说一句,当我重设
同样,我已经注意到当我执行
models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | class SubscriberModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4(), unique=True, editable=False) email = models.EmailField() subscribed = models.DateTimeField(default=timezone.now()) ip_addr = models.CharField(null=False, max_length=250, default="") objects = models.Manager() def __str__(self): return"{%s}/EMAIL\\{%s}/\\Subscribed On/\\{%s}/\\From this IP" % \\ (self.email, self.subscribed, self.ip_addr) class Meta: unique_together = ('email', 'ip_addr') class ContactUsModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4(), unique=True, editable=False) name = models.CharField(max_length=150, null=False) email = models.EmailField() body = models.TextField() ip_addr = models.CharField(null=False, max_length=250, default="") date = models.DateTimeField(default=timezone.now()) objects = models.Manager() def __str__(self): return 'mail from {%s} | at {%s}' % (self.email, self.date) class Meta: unique_together = ('email', 'ip_addr') def save_image(title, filename): return '{%s}-{%s}' % (title, filename) class Post(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4(), unique=True, editable=False) title = models.CharField(max_length=250) body = models.TextField() main_image = models.ImageField(null=False, upload_to=save_image) second_image = models.ImageField(blank=True, default="") third_image = models.ImageField(blank=True, default="") fourth_image = models.ImageField(blank=True, default="") fifth_image = models.ImageField(blank=True, default="") created_at = models.DateTimeField(default=timezone.now()) # get url def slug(self): return slugify(self.title) def get_absolute_url(self): return reverse('lp:post_detail', kwargs={'slug': self.slug(), 'pk': self.pk}) def __str__(self): return '%s' % self.title class Meta: ordering = ['-created_at'] |
完整回溯
Traceback (most recent call last): File
"/venv/lib/python3.7/site-packages/django/db/backends/utils.py",
line 86, in _execute
return self.cursor.execute(sql, params) psycopg2.errors.UniqueViolation: duplicate key value violates unique
constraint"lp_post_pkey" DETAIL: Key
(id)=(5de7b062-14b2-42ef-a9ee-95bbb17ccf3b) already exists.
我最近的2次迁移
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | class Migration(migrations.Migration): dependencies = [ ('lp', '0008_auto_20191221_2016'), ] operations = [ migrations.AlterField( model_name='contactusmodel', name='date', field=models.DateTimeField(default=datetime.datetime(2019, 12, 21, 20, 17, 10, 770047, tzinfo=utc)), ), migrations.AlterField( model_name='contactusmodel', name='id', field=models.UUIDField(default=uuid.UUID('37e52230-3c82-45eb-bbb9-aeb432b12247'), editable=False, primary_key=True, serialize=False, unique=True), ), migrations.AlterField( model_name='post', name='created_at', field=models.DateTimeField(default=datetime.datetime(2019, 12, 21, 20, 17, 10, 770612, tzinfo=utc)), ), migrations.AlterField( model_name='post', name='id', field=models.UUIDField(default=uuid.UUID('f4e05be4-2722-47b2-b636-232079114157'), editable=False, primary_key=True, serialize=False, unique=True), ), migrations.AlterField( model_name='subscribermodel', name='id', field=models.UUIDField(default=uuid.UUID('61b77cb5-5f33-4b8b-b235-83d3b10cc989'), editable=False, primary_key=True, serialize=False, unique=True), ), migrations.AlterField( model_name='subscribermodel', name='subscribed', field=models.DateTimeField(default=datetime.datetime(2019, 12, 21, 20, 17, 10, 741394, tzinfo=utc)), ), ] class Migration(migrations.Migration): dependencies = [ ('lp', '0007_auto_20191221_2004'), ] operations = [ migrations.AlterField( model_name='contactusmodel', name='date', field=models.DateTimeField(default=datetime.datetime(2019, 12, 21, 20, 16, 18, 987126, tzinfo=utc)), ), migrations.AlterField( model_name='contactusmodel', name='id', field=models.UUIDField(default=uuid.UUID('fabeec4c-bdd0-443a-81e9-2ea0ba8c8f4b'), editable=False, primary_key=True, serialize=False, unique=True), ), migrations.AlterField( model_name='post', name='created_at', field=models.DateTimeField(verbose_name=datetime.datetime(2019, 12, 21, 20, 16, 18, 987702, tzinfo=utc)), ), migrations.AlterField( model_name='post', name='id', field=models.UUIDField(default=uuid.UUID('aafc7ac3-f48b-4a74-a9cd-2af3a8d3fcae'), editable=False, primary_key=True, serialize=False, unique=True), ), migrations.AlterField( model_name='subscribermodel', name='id', field=models.UUIDField(default=uuid.UUID('b9c2a42c-3265-4a13-af48-ff5db4f38d30'), editable=False, primary_key=True, serialize=False, unique=True), ), migrations.AlterField( model_name='subscribermodel', name='subscribed', field=models.DateTimeField(default=datetime.datetime(2019, 12, 21, 20, 16, 18, 958998, tzinfo=utc)), ), ] |
您的问题是您将默认值设置为
解决方案是使用不带括号的