2017-09-10 1 views
0

이 같은 장고의 모델을 가지고 :장고 통과 인수

class Client(models.Model): 
    type = (choices) 

class Bill(models.Model): 
    client = models.ForeignKey(Client) 

class Detail(models.Model): 
    total = models.MoneyField() # i used currency package 
    bill = models.ForeignKey(Bill) 

상세 클래스는 빌의 판매 세부 사항을 포함, 난 이미 같은 시간에 청구서 및 세부 정보를 저장하는 거래를했다 내가 Detail.Save()에 Bill.save()에서 Client.type를 전달하려는하지만 Bill.save() 메소드에서, 나는 어떻게 통과 인수를 모르는

def save(self, *args, **kwargs): #this is Bill save method 
    client = self.Client 
    transaction.atomic: 
     super(Bill, self).save(*args, **kwargs) 
     for detail in self.details 
      detail.save(client) 

def save(self, *args, **kwargs): #this is Detail save method 
    self.pricing(client) 
    super(Detail, self).save(*args, **kwargs) 

def pricing(self, client): 
    if client.type = 'value1': 
     self.total = self.total - (self.total*5/100) 
    elif client.type = 'value2': 
     self.total = self.total - (self.total*7/100) 
    else: 
     self.total = self.total - (self.total*10/100) 

같은가 작동합니다 파이썬과 장고,이 문제를 해결하는 가장 깨끗한 해결책은 무엇입니까? 간단히 말해서 bill.save 메소드가 client.type 값을 선택하고 detail.save를 통해이를 처리하여 합계를 계산합니다.

감사

당신은 다른의 클라이언트 변수 ( detail.save(client=client))를 통과하려면 다음 코드를 시도 할 방법을 저장하고 client = kwargs.get('client')

def save(self, *args, **kwargs): #this is Bill save method 
    client = self.Client 
    transaction.atomic: 
     super(Bill, self).save(*args, **kwargs) 
     for detail in self.details 
      detail.save(client=client) 

def save(self, *args, **kwargs): #this is Detail save method 
    client = kwargs.get('client') 
    self.pricing(client) 
    super(Detail, self).save(*args, **kwargs) 

월을 사용하여이 변수에 액세스 저장 방법에 kwargs로의 매개 변수를 전달할 수 있습니다

답변

1

귀하의 경우에는

+0

고맙습니다. (현재이 프로젝트는 집에있는 컴퓨터에 있습니다.) –

+0

새 레코드를 만들 때 솔루션이 작동하는 것처럼 보일 수 있지만 업데이트하려고하면이 오류 메시지가 나타납니다 : 예기치 않은 키워드 인수 '클라이언트'가 생긴다 –

+1

항목을 업데이트하면 클라이언트 변수가'.save (client = client)'가된다. –

1

..이 당신을하는 데 도움이 될, 당신이 할 수있는 간단한 사용 자체 속성 :

def save(self, *args, **kwargs): #this is Detail save method 
    self.pricing(self.bill.client) 
    #   ^^^^^^^^^^^ 
    super(Detail, self).save(*args, **kwargs) 
+0

@nikhil 솔루션으로 당신의 제안을 사용 해줘서 고맙습니다, 나는 또한 요즘 많이 혼란스러워했던 잘못된 오류를 많이 만들었습니다. –