model Code
class Detail(models.Model):
"""
Order, Release의 부모 클래스
"""
ymd = models.CharField(max_length=8)
code = models.CharField(max_length=255)
codeName = models.CharField(max_length=255)
count = models.IntegerField()
amount = models.DecimalField(decimal_places=2, max_digits=19, default=0)
amount_kg = models.DecimalField(decimal_places=2, max_digits=19, default=0, blank=True, null=True)
memo = models.TextField(blank=True, null=True)
class Meta:
abstract = True
class Release(Detail):
"""
출고에 관한 데이터 출고는 주문을 기반으로 생성되거나 독립적으로 생성될 수 있음
"""
price = models.IntegerField()
releaseVat = models.IntegerField()
releaseOrder = models.ForeignKey('order.Order', on_delete=models.CASCADE, null=True, blank=True)
class Order(Detail):
"""
주문 데이터
"""
orderLocationCode = models.ForeignKey(Location, on_delete=models.CASCADE)
orderLocationName = models.CharField(max_length=255)
price = models.DecimalField(decimal_places=1, max_digits=19)
django rest framework를 이용해서 Update, Delete를 하고있는데 ForeignKey가 걸려있는 데이터를 Update해달라는 요청이 왔다. 즉 Release Class - releaseOrder의 memo값을 수정해야 한다(주문메모를 출고 데이터 update 시 같이 변경)
Serializer Code
class ReleaseSerializer(serializers.ModelSerializer):
class Meta:
model = Release
fields = '__all__'
이렇게 아름답고 깔끔하게 되어있는 Serializer를 변경하기 싫지만 수정은 해야하니....
프론트 엔드쪽에서는 patch를 이용해 Update를 실시한다 그러므로 update 메소드를 오버라이딩해서 기본 update에 ForeignKey가 걸려있는 Order(주문) 데이터도 함께 변경해보자
class ReleaseSerializer(serializers.ModelSerializer):
orderMemo = serializers.CharField(required=False) # 프론트에서 넘어올때 orderMemo로 넘어옴
class Meta:
model = Release
fields = '__all__'
def update(self, instance, validated_data):
"""
출고조회 - 수정 시 ForeignKey Order의 메모 수정으로 overRide 실시(orderMemo)
출고 데이터 중 price(가격), releaseVat(부가세), 주문메모만을 변경함.
"""
instance.price = validated_data.get('price')
instance.releaseVat = validated_data.get('releaseVat')
instance.releaseOrder.memo = validated_data.get('orderMemo')
instance.releaseOrder.save()
instance.save()
return instance
ModelSerializer의 update 메소드를 오버라이딩해서 instance.releaseOrder.memo와 같이 접근해서 Order(주문) 데이터를 Release(출고) 데이터와 함께 Update를 실시하고 있다!
'django' 카테고리의 다른 글
Django workers process 메모리 공유 (0) | 2021.02.19 |
---|---|
Django queryset to json (0) | 2019.12.31 |
Django related_name(reverse 역참조 ) (0) | 2019.11.13 |
Django Docker 배포(production) (0) | 2019.10.25 |
헷가리는 Django Static 간략 정리 (0) | 2019.10.18 |