2017-03-15 1 views
1

검색을 많이했지만 적절한 방법을 찾을 수 없습니다. 일부 모델 개체 데이터를 다른 모델 개체 데이터로 복사하려고합니다. 아래 코드를 추가했습니다. 나는 3 개의 모델을 가지고있다. 당신이 볼 수 있듯이, 나는 수령 필드와 관련된 영수증 모델 을 가지고있다. 내가 Receiptitem 객체를 추가하고 싶을 때 나는 amount, vat 및 total_amount를 정확히 복사하고 싶다. 나는 방법을 저장하지 않았다.Django - 모델 필드를 다른 필드로 복사

사용자는 제품 및 영수증을 추가합니다. 그러면 사용자가 ReceiptItem 영수증과 제품 드롭리스트를 선택하려고 할 때 그는 원하는 객체를 선택할 것이고 다른 것들은 자동으로 가져올 것입니다. 나는 이것을하고 싶었다.

class Receipt(models.Model): 

amount = models.DecimalField(max_digits=5, decimal_places=2) 
vat = models.DecimalField(max_digits=5, decimal_places=2) 
total_amount = models.DecimalField(max_digits=5, decimal_places=2) 

def __str__(self): 
    return str(self.total_amount) 

class ReceiptItem(models.Model): 

receipt = models.ForeignKey('Receipt', on_delete=models.CASCADE) 
product = models.ForeignKey('Product', on_delete=models.CASCADE) 
amount = models.DecimalField(max_digits=5, decimal_places=2) 
vat = models.DecimalField(max_digits=5, decimal_places=2) 
vat_rate = models.DecimalField(max_digits=5, decimal_places=2) 
sub_total = models.DecimalField(max_digits=5, decimal_places=2) 
name = models.CharField(max_length=200) 


class Product(models.Model): 

name = models.CharField(max_length=200) 
vat_rate = models.DecimalField(max_digits=5, decimal_places=2) 
amount = models.DecimalField(max_digits=5, decimal_places=2) 

def __str__(self): 
    return self.name 

답변

0

당신은 데이터 저장에 복사해야 할 경우 ReceiptItem이 같은 모델의 save 기능을 오버로드 할 수 있습니다

class ReceiptItem(models.Model): 
    # your fields here 
    def save(self, *args, **kwargs): 
     self.vat = self.receipt.vat 
     # copy the other data you need here 

     # the line below calls Model.save() which commits 
     # your changes to the database 
     super(ReceiptItem, self).save(*args, **kwargs) 

또 다른 옵션은 ReceiptItem.__init__()의 값을 설정할 수 있습니다 당신이 경우 개체가 데이터베이스에 저장되기 전에 값이 필요합니다.

관련 문제