0

我想在我的 django1.6 应用程序中生成一个唯一的字符串。为此,我想将主键(自动字段)与字符串连接起来。我的代码是

class Complaints(models.Model):
    gid     = models.AutoField(primary_key=True) 
    complaint_no    = models.CharField(max_length=50)       
    status      = models.IntegerField(default=0,blank=False,null=False)
    def __str__(self):
        return ('%s %s' % (self.gid, self.complaint_no))

    def save(self, force_insert=False, force_update=False):     
        self.complaint_no = '%s%d' % (self.complaint_no,self.gid)
        super(Complaints, self).save(force_insert, force_update)    
    class Meta:
        db_table = 'complaints'
        verbose_name = "complaints"     

但我收到错误消息

/callcentre/register/ 处的类型错误

%d 格式:需要一个数字,而不是 NoneType

请帮我解决这个错误!

4

2 回答 2

1
  1. 将字段 id 创建为字符字段,例如

string_id = models.CharField(max_length=100, default='file')

  1. 创建一个函数,在保存模型时生成字符串 id。 def save(self): new_id = self.id
    self.string_id = str(new_id) + '_dot' super(YourModelName, self).save()
于 2017-09-21T13:40:46.437 回答
0

你需要先打电话super()

正如您在文档中所读到的:

在调用 save() 之前,无法判断 ID 的值是多少,因为该值是由您的数据库计算的,而不是由 Django 计算的。

当您调用super().save()时,数据库引擎会计算id(或gid在您的情况下,但请重新考虑使用提供的id),从而允许您使用它。在此之前它是None

您也可以查看此主题

于 2014-07-24T11:20:47.417 回答