使用django将自动字段与字符串连接起来

时间:2014-07-24 11:06:57

标签: python django django-1.6 autofield

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

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 /

中的TypeError

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

请帮我解决这个错误!

2 个答案:

答案 0 :(得分:1)

  1. 将字段ID创建为字段,例如
  2. 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()

答案 1 :(得分:0)

您需要先致电super()

您可以阅读documentation

  

在调用save()之前无法确定ID的值是什么,因为该值是由数据库计算的,而不是由Django计算的。

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

您也可以查看this topic