首页 > 解决方案 > Django中自定义格式的唯一ID生成器

问题描述

我想在我的模型中生成一个唯一的 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

谢谢

标签: djangodjango-models

解决方案


我认为您不应该将唯一 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)

推荐阅读