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

운영체제를 선택할때 32bit와 64bit를 선택한다

많은 사람들이 32bit는 4GB까지 밖에 메모리 지원이 되지 않는걸 안다

하지만 왜?! 도대체 왜 그런지 아는 사람은 5%미만 일 것이다 심지어 전산실에 근무하고있는 사람 조차 모르는 사람이 있다..(IT 전공자가 모른다면 문제가 있다.)

 

1. 32bit와 64bit의 의미

 가. 속도의 측면에서: 데이터를 한 번에 몇 개 보낼 수 있는지를 나타내는 지표가 32비트와 64비트의 차이이다. 흔히 고속도로에 비유해서 32비트는 차선이 32개인 차선이고 64비트는 64개의 차선이라고 표현한다. 그렇다 데이터를 2배나 더 많이 보낼 수 있기 때문에 속도가 향상된다.

 

 나. 메모리의 측면에서: 32비트 컴퓨터는 메모리 주소를 32비트로 표현하고, 64비트 컴퓨터는 메모리 주소를 64비트로 표현한다. 무슨 말인고 하니 32비트 컴퓨터는 2의 32승 = 4,294,967,296 = 4 x 1024 x 1024 x 1024 바이트 즉 4GB 메모리를 가리킬 수 있는 주소를 가지게 됩니다. 이러한 이유로 32bit 컴퓨터는 4GB 이상의 메모리를 지원 할 수 없다는 이유이다!

64비트는 물론 2의 64승 = 18,446,744,073,709,551,616바이트 까지 지원한다. 수가 너무 커진다 그냥 꼽으면 꼽는데로 메모리를 늘릴 수 있다고 생각하자.

 

그래서 32bit를 쓸때 포인터 변수의 크기는 32bit 즉 4바이트고 64bit일때는 64bit 즉 8바이트다

 

 

2. 메모리에 대하여(가르킨다, Point!)

 - 설명하기 쉽게 8bit 컴퓨터로 메모리에 대해서 이야기 해보자 한다

 

8비트 컴퓨터니깐 요즘 많이쓰는 32bit, 64bit 컴퓨터에 비해서 속도가 느리고(속도적 측면) 수용할 수 있는 메모리도 작을것이다(메모리 측면).

 

8비트 컴퓨터는 2의 8승 = 256바이트를 표현 할 수 있다.(메모리의 주소는 0000 0000부터 1111 1111까지)

  ※ 아래의 그림을 보면 메모리 주소 한 개는 1바이트를 가리킨다 

3. 메모리 주소는 16진수로

 - 컴퓨터가 0과 1로 이루어진 2진수로 표현된다고 했는데 정작 메모리 주소를 이야기할때는 16진수로 이야기한다. 16진수가 좀 더 멋져서 폼잡을라고 쓰는가 했는데 16진수를 쓰면 2진수보다 짧고 간결하게 표현 할 수 있기 때문에 쓴다는걸 알았다.(사람은 배워야한다)

 

위의 8비트를 표현할때 메모리주소를 표현하려면 0000 0000 8자리가 필요하지만 16진수를 쓰면 0x00으로 두자리로 간단하게 표현된다. 

 

아래는 8비트의 2진수 0000 0001을 hex 즉 16진수로 바꿔보았다 0x01 짧아서 좋다...

 

+ Recent posts