2017-09-19 129 views
0

作为示例,假设我正在记录库存项目,并且每个项目都需要一个唯一的标识符(在自己读取时也是有意义的)。Django模型:从模型实例中的其他字段生成字段内容

下面介绍我想

class InventoryItem(models.Model): 
    item_name = models.TextField(max_length = 100) 
    item_manufacturer = models.TextField(max_length = 20) 
    item_product_num = models.TextField(max_length = 25) 
    item_lot = models.TextField(max_length = 25) 
    item_received_on = models.DateTimeField(auto_now_add = True) 
    item_price = models.DecimalField() 
    item_quantity = models.DecimalField() 
    item_special_instructions = models.TextField(default = "NA", max_length = 200) 
    item_reinspection_date = models.DateField() 

    def makeUniqueID(self): 
     unique_str = self.item_manufacturer + self.item_product_num + self.item_lot + datetime.datetime.now().strftime("%Y%m%d%H%M%S") 
     return unique_str 
    item_uniqueID = models.TextField(max_length = 50, default = self.makeUniqueID()) 

上面的代码错误NameError: name 'self' is not defined模型,我怀疑这是不是这样做的正确方法。 任何帮助,非常感谢!

我正在使用的数据库SQLite的是如果改变任何东西

回答

2

我会通过覆盖模型上的保存功能做到这一点。

class InventoryItem(models.Model): 
    #Other Fields 
    item_uniqueID = models.TextField(max_length = 50) 
    def save(self, *args, **kwargs): 
     self.item_uniqueID = self.item_manufacturer + self.item_product_num + self.item_lot + datetime.datetime.now().strftime("%Y%m%d%H%M%S") 
     super(InventoryItem, self).save(*args, **kwargs) 
1

可能尝试以下操作:

class InventoryItem(models.Model): 
    item_name = models.TextField(max_length = 100) 
    item_manufacturer = models.TextField(max_length = 20) 
    item_product_num = models.TextField(max_length = 25) 
    item_lot = models.TextField(max_length = 25) 
    item_received_on = models.DateTimeField(auto_now_add = True) 
    item_price = models.DecimalField() 
    item_quantity = models.DecimalField() 
    item_special_instructions = models.TextField(default = "NA", max_length = 200) 
    item_reinspection_date = models.DateField() 
    item_uniqueID = models.TextField(max_length = 50) 

    def save(self, *args, **kwargs): 
     if not self.item_uniqueID: 
      self.item_uniqueID = (self.item_manufacturer + 
            self.item_product_num + 
            self.item_lot + 
            datetime.datetime.now().strftime("%Y%m%d%H%M%S")) 
      super(InventoryItem, self).save(*args, **kwargs)