我想在序列号中拒绝id

时间:2018-03-23 07:43:02

标签: python django

我想在序列号中反对id 1,2,3···。我写代码来抵制用户数据,

from django.db import models
import uuid

# Create your models here.
def get_next():
    try:
        return Users.objects.latest('pk').increment_num + 1
    except:
        return 1

class Users(models.Model):
    id = models.UUIDField(primary_key=True, default=get_next, editable=False)
    sex = models.CharField(max_length=100, null=True, default=None)
    age = models.CharField(max_length=100, null=True, default=None)

但是当我试图抵制用户的数据时,

  

django.core.exceptions.ValidationError:["' 1'不是有效的UUID。"]

错误发生。 所以我重写了id = models.IntegerField(primary_key=True, default=get_next),但如果我拒绝多个用户的数据,只剩下id = 1的数据,我无法理解,但其他数据被删除了。我的代码有什么问题?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

UUID不是数字,但您可以生成新的简单UUID

import uuid
from django.db import models

# Create your models here.
def get_next():
    return uuid.uuid4()

class Users(models.Model):
    id = models.UUIDField(primary_key=True, default=get_next, editable=False)
    sex = models.CharField(max_length=100, null=True, default=None)
    age = models.CharField(max_length=100, null=True, default=None)

默认情况下,Django将存储整数主键。为此,您需要删除一些代码。

from django.db import models


class Users(models.Model):
    sex = models.CharField(max_length=100, null=True, default=None)
    age = models.CharField(max_length=100, null=True, default=None)

等待数据库后端,它将是顺序的。

答案 1 :(得分:0)

你不需要uuid,因为它只是一个整数! ...否则请使用此

替换 id 字段
id = models.UUIDField(primary_key=True, default=get_next, editable=False, autoincrement)

然后做

>>>python manage.py makemigrations
>>>python manage.py migrate