2017-07-29 75 views
1

我想创建一个自定义的序列,如PO-0001采购订单,SO-0001销售订单等Django的自定义序列格式

我已经试过这样的事情:

class Requisitions(models.Model): 
    number = models.CharField(max_length=20, verbose_name='Number') 
    transDate = models.DateField(verbose_name='Date') 
    businessUnit = models.ForeignKey(BusinessUnit, verbose_name='Unit') 
    division = models.ForeignKey(Division, verbose_name='Division') 
    remarks = models.TextField 
    status = models.IntegerField(verbose_name='Status') 

    def save(self, *args, **kwargs): 
     letter = 'REQ-' 
     lastNumber = 1 
     self.number = '%s%03d'(letter,lastNumber) 

     super(self.__class__, self).save(*args, **kwargs) 

我在保存新记录时在管理页面中出现错误:

'str' object is not callable 
Request Method: POST 
Request URL: http://localhost:8000/admin/procurement/requisitions/add/ 
Django Version: 1.11.3 
Exception Type: TypeError 
Exception Value: 'str' object is not callable 

我该如何解决该错误?

+0

不相关的问题,但你**绝不能* *使用'self .__ class__'作为'super'的第一个参数。如果你继承这个模型,这将导致无限循环。显式使用类名,或者升级到Python 3,不需要传递任何东西。 –

回答

0

您省略了包含字符串格式(%)的运算符。更改以下行:

self.number = '%s%03d'(letter,lastNumber) 

self.number = '%s%03d' % (letter,lastNumber) 

甚至更​​好,使用更现代化的.format()功能:

self.number = '{0}{1:03d}'.format(letter, lastNumber) 
+0

谢谢@Selcuk 我现在工作。 – Pams