簡體   English   中英

Django模型:從模型實例中的其他字段生成字段內容

[英]Django Models: Generate field content from other fields in model instance

例如,假設我正在記錄庫存物料,並且每個物料都需要一個唯一的標識符(當自己讀取時也很有意義)。

下面顯示了我正在嘗試的模型

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,如果有任何更改

我將通過重寫模型上的save函數來做到這一點。

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)

可能嘗試以下操作:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM