django - Django中自定义格式的唯一ID生成器
问题描述
我想在我的模型中生成一个唯一的 id 代码,例如 -
任何人都可以帮助我吗?我想要表格中的 id 如下所示-
class parameter(models.Model)
name=models.models.CharField(max_length=50)
type=model.#should come from another table
subtype=model.#should come from another table
id= # should compile all the above as in picture
谢谢
解决方案
我认为您不应该将唯一 id 存储在 DB 中,因为您可以通过属性方法轻松生成它:
class Parameter(models.Model)
name=models.models.CharField(max_length=50)
type=model.ForeignKey(Type)
subtype=model.ForeignKey(SubType)
product_type=model.ForeignKey(ProductType)
serial_no = models.CharField()
@property
def generated_id(self):
return '{}/{}/{}/{}'.format(self.type_id, self.subtype_id, self.product_type_id, self.serial_no.zfill(2))
如果您打算在管理站点中显示它,那么只需尝试如下:
@admin.register(Parameter)
class ParameterAdmin(admin.ModelAdmin):
model = Parameter
fields = ['type', 'sub_type', 'product_type', 'serial_no', 'generated_id']
readonly_fields = ('generated_id',)
更新
如果要存储在数据库中,则需要覆盖模型的保存方法。像这样:
class Parameter(models.Model)
name=models.models.CharField(max_length=50)
type=model.ForeignKey(Type)
subtype=model.ForeignKey(SubType)
product_type=model.ForeignKey(ProductType)
serial_no = models.CharField()
generated_id = models.CharField()
def generate_id(self):
return '{}/{}/{}/{}'.format(self.type_id, self.subtype_id, self.product_type_id, self.serial_no.zfill(2))
def save(self, *args, **kwargs):
self.generated_id = self.generate_id()
super().save(*args, **kwargs)
推荐阅读
- amazon-web-services - 使用亚马逊公开下载完整文件夹的最佳方式?
- ios - 如何在表格视图中创建和填充不同类型的单元格?
- python - 如何在python中打印一个数字n次?
- mysql - Sql 获取每个用户每天的小时数
- c# - 是否可以使用 ReadOnlySpan 从字符串中解析 int
- node.js - Firebase SDK 和 Firebase SDK for Cloud Functions 有什么区别?
- mongodb - 无法使用 docker-compose 从主机连接到 mongo
- javascript - 从 2 个数组创建一个字典( MAP )
- php - 在 jwt-auth 中是否可以为两个模型使用一个令牌?
- asp.net - 用户未登录时如何隐藏 CommandField?ASP.NET VB