sha*_*aan 2 django primary-key django-models
在我的 Django 应用程序中,我创建了一个 id(主键)作为CharField长度为 6的模型。我使用了一个自定义验证器,它只允许用户输入整数。如果输入小于字段定义中指定的“六个”字符长度,是否可以在输入前添加零。
例如,用户在主键字段中输入值1234。现在我希望在保存时 pk 字段值应保存为001234。
我尝试这样做,save但是正在创建两条记录,一条是用户输入的,另一条是添加了零的。
这完全有可能实现我想要做的事情吗?
这是我正在做的事情(虽然对我来说似乎技术含量很低):
class Plant(models.Model):
plant_id = models.CharField(primary_key=True,..,)
plant_name = models.CharField(max_length=55, verbose_name="Plant/W.Area")
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if len(self.plant_id) == 4:
ramp_up_obj_id = '00' + str(self.plant_id)
self.plant_id = str(ramp_up_obj_id)
super().save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
保存的结果是(如上所述):对于1001 的输入值,创建了两条记录。一个是1001,另一个是001001。
您可以zfill在调用super().save方法之前使用函数并且super().save()只调用一次。
class Plant(models.Model):
plant_id = models.CharField(primary_key=True,..,)
plant_name = models.CharField(max_length=55, verbose_name="Plant/W.Area")
def save(self, *args, **kwargs):
self.plant_id = str(self.plant_id).zfill(6)
super().save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)