Nag*_*tri 16 django primary-key unique-key
我有一个自定义主键需要在模型中的特定数据上设置.
这还不够,因为尝试插入重复的数字成功了.所以,现在当我更换primary_key=True到unique=True它正常工作,并拒绝重复的数字!.但是根据这个文件(使用字段).
primary_key=True暗示null=False
和unique=True.
这使我感到困惑的是,为什么它首先接受内置的价值
unique=True?
谢谢.
更新声明:
personName = models.CharField(primary_key=True,max_length=20)
Run Code Online (Sandbox Code Playgroud)
mip*_*adi 16
使用AutoField与primary_key替代.
编辑:
如果不使用AutoField,则必须手动计算/设置主键字段的值.这相当麻烦.您是否需要 ReportNumber使用主键?您仍然可以使用唯一的报告编号来查询报告,以及自动递增的整数主键.
编辑2:
当您说允许重复的主键值时,您指示发生的事情是更新具有相同主键的现有记录 - 实际上在数据库中实际上没有两个具有相同主键的对象(这不可能发生) ).问题在于Django的ORM层选择UPDATE(修改现有的DB记录)与INSERT INTO(创建新的DB记录)的方式.看看这一行django.db.models.base.Model.save_base():
if (force_update or (not force_insert and
manager.using(using).filter(pk=pk_val).exists())):
# It does already exist, so do an UPDATE.
Run Code Online (Sandbox Code Playgroud)
特别是这段代码:
manager.using(using).filter(pk=pk_val).exists()
Run Code Online (Sandbox Code Playgroud)
这说:"如果Model数据库中存在与此主键相同的记录,则进行更新." 因此,如果您重新使用主键,Django会假定您正在进行更新,因此不会引发异常或错误.
我认为最好的想法是让Django为你生成一个主键,然后有一个CharField具有unique约束的单独的字段(或其他).
| 归档时间: |
|
| 查看次数: |
48611 次 |
| 最近记录: |