我想在我的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
请帮我解决这个错误!
答案 0 :(得分:1)
string_id = models.CharField(max_length=100, default='file')
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。