2014-09-22 6 views
0

저는 장고를 사용하여 경영진 (비즈니스 관리, 말하기)과 같은 것을 만드는 목표를 가진 프로젝트를 작성하고 있습니다.텍스트 파일 읽기 및 쓰기

실제로 제품을 증가하는 코드로 식별하기 때문에 글로벌 변수를 지원해야합니다. 즉, 이 기본 키가 아니며을 사용하는 코드입니다. 그래서 전역 변수의 사용을 피하기 위해 서버 재부팅시 문제가 발생할 수 있으므로 실제 코드를 텍스트 파일에 쓰고 싶습니다.

저장 방법을 재정의하면이 파일에 쓰여진 번호가 유지되고 제품 코드 필드를 채우는 데 사용됩니다. 그런 다음 파일에 기록 된 숫자를 늘리고 파일을 닫습니다. 이 방법으로, 나는 che 코드를 재설정하기 위해 텍스트 편집기로 "0"(제로)을 써야합니다! 서버가 내가 다른 방법을 사용하여 같은 실제 수를 잃지 말고 재부팅 경우 (예 : 변수는 캐시에 저장)

내가 만난 오류가 없습니다 : 여기라는 그런 파일/디렉토리 product_code.txt

모델의 코드 : 파일 product_code.txtmodels.py 같은 디렉토리에 있습니다

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" 

나는 오류 코드 라인

handle = open('product_code.txt', 'r+') 
참조 확인

디버거로 검사했기 때문에.

어떤 아이디어로 문제를 해결할 수 있습니까? 주셔서 감사합니다

당신은 append 모드에서 파일을 열어야합니다
+0

django 루트 디렉토리 (django를 실행하는 디렉토리)에 파일을 저장하거나 코드에서 절대 경로를 사용할 수 있습니다. 어쨌든 파일 시스템 대신 데이터베이스에 product_code를 저장하는 것이 좋습니다 (예 : variable_name 및 value의 두 필드가있는 테이블 전역). – Jiri

답변

0

:

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

하지만 당신은 당신이 어떤 경쟁 조건을 참조하지 않을 처음부터 알지 못한다면 나는 다른 방법 (아마도 데이터베이스)를 사용하여 고려할 것 .