[英]django.db.utils.IntegrityError: FOREIGN KEY constraint failed in django
[英]django.db.utils.IntegrityError: UNIQUE constraint failed:
我正在用 django 审查 api,但我遇到了问题。
模型.py
from django.db import models
import uuid
# Create your models here.
from django.utils.text import slugify
class buildingData(models.Model):
building_name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(unique=True, default=uuid.uuid1)
building_loc = models.CharField(max_length=50)
building_call = models.CharField(max_length=20)
building_time = models.CharField(max_length=50)
def save(self, *args, **kwargs):
self.slug = slugify(self.building_name)
return super().save(*args, **kwargs)
class reviewData(models.Model):
building = models.ForeignKey(buildingData, related_name='reviews', on_delete=models.CASCADE, null=False, blank=False)
review_content = models.TextField()
star_num = models.FloatField()
网址.py
from django.contrib import admin
from django.urls import path
from crawling_data.views import ReviewListAPI
from crawling_data.views import BuildingInfoAPI
urlpatterns = [
path('admin/', admin.site.urls),
path('api/buildingdata/', BuildingInfoAPI.as_view()),
path('api/buildingdata/<slug:slug>/', ReviewListAPI.as_view())
]
我正在通过爬行收集数据,但是......
django.db.utils.IntegrityError: UNIQUE constraint failed: crawling_data_buildingdata.slug
出现此错误。
我试过删除迁移文件并再次迁移,但仍然不起作用。
我的代码有什么问题还是有其他方法可以解决这个问题?
这是因为 uuid1 是根据您的机器 ID 和时间戳生成的,并且您的机器 ID 保持不变,这就是为什么它们最后看起来非常相似。 您可以使用 uuid4() 来获取随机的唯一 UUID。
您应该将第一个 model 更改为:
class buildingData(models.Model):
building_name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(unique=True, default=uuid.uuid4)
building_loc = models.CharField(max_length=50)
building_call = models.CharField(max_length=20)
building_time = models.CharField(max_length=50)
你也可以使用你的 slug 作为主键:
slug = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
我看到你的存档 function。在你的存档 function 中,你应该删除 slug 分配。 或者将其更改为self.slug = None
。 如果你想从建筑物名称中获得一个 slug,你必须在 model 中使用 TextField 或 CharField:
slug = models.TextField(unique=True, default=uuid.uuid4)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.