이 같은 장고의 모델을 가지고 :장고 통과 인수
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로의 매개 변수를 전달할 수 있습니다
고맙습니다. (현재이 프로젝트는 집에있는 컴퓨터에 있습니다.) –
새 레코드를 만들 때 솔루션이 작동하는 것처럼 보일 수 있지만 업데이트하려고하면이 오류 메시지가 나타납니다 : 예기치 않은 키워드 인수 '클라이언트'가 생긴다 –
항목을 업데이트하면 클라이언트 변수가'.save (client = client)'가된다. –