2014-09-22 85 views
0

我正在編寫一個項目,目標是使用Django構建一個類似管理(業務管理,如何說)的東西。其實,我需要一個全局變量的支持,因爲產品是通過增加代碼來識別的,有時候我重置(它不是主鍵,只是我用來工作的代碼)。 因此,爲了避免使用全局變量,也是由於如果服務器重新引導會導致問題,我想寫一個文本文件的實際代碼。讀寫文本文件

使用保存方法覆蓋我保留寫在這個文件中的數字,我用它來填補產品代碼字段。然後我增加寫在文件中的數字並關閉它。這樣,我只需要在文件中用文本編輯器編寫「0」(零)來重置che代碼!如果服務器重新啓動,我不喜歡失去使用其他方法的實際數量(即:變量保存在高速緩存)

我遇到的錯誤是:沒有這樣的文件/目錄名爲product_code.txt

這裏模型的代碼:

class Product(models.Model): 

    code = models.AutoField(primary_key=True, editable=False) 
    #category = models.ForeignKey(Category) 

    product_code = models.IntegerField(editable=False, blank=True, null=True, verbose_name="codice prodotto") 

    description = models.CharField(max_length=255, verbose_name="descrizione") 
    agreed_price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="prezzo accordato") 
    keeping_date = models.DateField(default=datetime.date.today(), verbose_name="data ritiro") 

    selling_date = models.DateField(blank=True, null=True, verbose_name="data di vendita") 
    discount = models.SmallIntegerField(max_length=2, default=0, verbose_name="sconto percentuale applicato") 
    selling_price = models.DecimalField(
     max_digits=5, decimal_places=2, blank=True, null=True, verbose_name="prezzo finale" 
    ) 
    sold = models.BooleanField(default=False, verbose_name="venduto") 

    def save(self, force_insert=False, force_update=False, using=None, update_fields=None): 

     if self.product_code is None: 
      handle = open('product_code.txt', 'r+') 
      actual_code = handle.read() 
      self.product_code = int(actual_code) 
      actual_code = int(actual_code) + 1 # Casting to integer to perform addition 
      handle.write(str(actual_code)) # Casting to string to allow file writing 
      handle.close() 

     if self.sold is True: 
      if self.selling_date is None or "": 
       self.selling_date = datetime.date.today() 
      if self.selling_price is None: 
       self.selling_price = self.agreed_price - (self.agreed_price/100*self.discount) 

     super(Product, self).save() 

    class Meta: 
     app_label = 'business_manager' 
     verbose_name = "prodotto" 
     verbose_name_plural = "prodotti" 

文件product_code.txt坐落在models.py 同一個目錄我保證誤差指的是代碼行

handle = open('product_code.txt', 'r+') 

因爲我用調試器檢查過它。

任何想法來解決這個問題?謝謝

+0

您應該將文件存儲在您的django根目錄(您運行django的目錄)中,或者您可以在代碼中使用絕對路徑。無論如何,我建議將product_code存儲在數據庫中而不是文件系統(f.e.表全局變量,包含2個字段:variable_name和value。 – Jiri 2014-09-22 14:48:37

回答

0

你應該append模式打開文件:

with open('product_code.txt', 'a') as handle: 
    ... 

但是,除非你從你不會看到任何競爭條件開始知道我會考慮使用另一種方法(可能是數據庫) 。