저는 장고를 사용하여 경영진 (비즈니스 관리, 말하기)과 같은 것을 만드는 목표를 가진 프로젝트를 작성하고 있습니다.텍스트 파일 읽기 및 쓰기
실제로 제품을 증가하는 코드로 식별하기 때문에 글로벌 변수를 지원해야합니다. 즉, 이 기본 키가 아니며을 사용하는 코드입니다. 그래서 전역 변수의 사용을 피하기 위해 서버 재부팅시 문제가 발생할 수 있으므로 실제 코드를 텍스트 파일에 쓰고 싶습니다.
저장 방법을 재정의하면이 파일에 쓰여진 번호가 유지되고 제품 코드 필드를 채우는 데 사용됩니다. 그런 다음 파일에 기록 된 숫자를 늘리고 파일을 닫습니다. 이 방법으로, 나는 che 코드를 재설정하기 위해 텍스트 편집기로 "0"(제로)을 써야합니다! 서버가 내가 다른 방법을 사용하여 같은 실제 수를 잃지 말고 재부팅 경우 (예 : 변수는 캐시에 저장)
내가 만난 오류가 없습니다 : 여기라는 그런 파일/디렉토리 product_code.txt
모델의 코드 : 파일 product_code.txt
이 models.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
모드에서 파일을 열어야합니다
django 루트 디렉토리 (django를 실행하는 디렉토리)에 파일을 저장하거나 코드에서 절대 경로를 사용할 수 있습니다. 어쨌든 파일 시스템 대신 데이터베이스에 product_code를 저장하는 것이 좋습니다 (예 : variable_name 및 value의 두 필드가있는 테이블 전역). – Jiri