有人能帮我在我的模型中创建一个字段,生成一个唯一的8个字符的字母数字字符串(即用户每次提交表单时都要使用######)ID?
我的models.py表单当前如下:
from django.db import models
from django.contrib.auth.models import User
class Transfer(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
我已经看过Python的UUID特性,但这些标识符与我希望生成的标识符相比,既长又乱。
任何帮助将是非常感谢!
5条答案
按热度按时间sigwle7e1#
就像这样:
a9wyjsp72#
在Django中,您可以通过使用
UUIDField
与max_length=8
和default=uuid.uuid4
为模型创建一个唯一的8字符ID字段。下面是一个如何在Django中定义此字段的示例model.py:editable=False
属性可防止编辑字段,确保值保持唯一。最后,max_length=8确保UUID被截断为8个字符。请注意,使用UUID作为主键可能有一些缺点,例如与整数主键相比,增加了存储大小和较慢的查询。在决定使用UUID作为主键之前,请仔细考虑您的用例。
cclgggtu3#
为了使ID真正唯一,您必须跟踪以前生成的唯一ID,这可以通过简单的sqlite DB简单地完成。
要生成一个简单的唯一id,请使用以下行:
更多关于字符串的内容可以在文档中找到
jvlzgdj94#
我建议像这样创建一个令牌生成器类:
那么在你的模型中应该是这样的:
a64a0gku5#
您可以使用DB id并使用类似这样的东西将其转换为sting:
如果您可以根据需要调整代码以使用更少或更多的字符。