1

POST 메서드에서 field1, field2, field3의 세 필드가 있다고 가정 해 봅시다. POST 메서드 field2field3은 데이터베이스에 추가하는 동안 동일한 값을 가져야합니다. 따라서 예를 들어 field2=2, field3=2을 수동으로 추가 할 필요가 없습니다. field1=1, field2=2 만 추가하면 field3=2이 자동으로이 본문에 추가되고 마지막으로 전체 필드 3 개가 데이터베이스에 추가됩니다. 가장 최적의 방법으로 어떻게해야하는지 궁금합니다. 보기에서해야합니까? 아래에 나와있는 방식대로 시도합니다.어떻게 장고에서 개체를 매핑 할 수 있습니까?

views.py :

class UserObject(GenericAPIView): 

    def get_serializer_class(self, *args, **kwargs): 
     if self.request.method == 'POST': 
      return ObjectPostSerializer 
     return ObjectSerializer 

    def post(self, request, user_id): 

     serializer = ObjectPostSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save(user_id=user_id) 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

serializers.py :

class ObjectPostSerializer(serializers.ModelSerializer): 

    def __init__(self, *args, **kwargs): 
     super(ObjectPostSerializer, self).__init__(*args, **kwargs) 

     for key in self.fields: 
      self.fields['field3'].required = False 

    class Meta: 

     model=Object 
     field3 = model.field2 

     fields = ('__all__') 
+0

는'field2'와는'항상 데이터베이스에서 같은 값을가집니다 field3'는 왜 두 필드가 필요합니까? 그들 중 한 명과 함께 할 수 없습니까? 그러나 질문에 답하기 위해,'field3'의 값을 무시하고 두 데이터베이스 칼럼 모두'field2'의 값을 사용하도록 serializer.save()를 작성하는 것이 좋은 방법입니다. –

+0

@ JohnGordon 향후 field2 만 업데이트되므로 field3은 초기 값을 의미합니다. 업데이트 된 질문으로 코드를 살펴볼 수 있습니까? 어떻게 해결할 수 있습니까? – wahtdbogh

+0

Django 객체 serializer에 대한 경험이 없으므로 자세한 것은 언급 할 수 없지만 올바른 생각을 갖고있는 것 같습니다. –

답변

1

당신이 간단한 논리를 사용 포스트 시리얼에서 field3를 제외하고, 모델

save 방법에 설정할 수 있습니다 될 수 있습니다

시리얼 라이저 :

class ObjectPostSerializer(serializers.ModelSerializer): 

    class Meta: 
     model=Object 
     exclude = ('field3',) 
모델

: 만약

class Object(model.Model): 
    # YOU FIELDS DECLARE HERE 

    def save(self, *args, **kwargs): 
     if not self.pk: 
      self.field3 = self.field2 
     super(Object, self).save(*args, **kwargs) 
+0

그러나'PUT' 또는'GET'과 같은 다른 방법에서는 전체 모델이 필요합니다. 'POST'에서만 한 필드를 덜 사용하고 싶습니다. – wahtdbogh

+0

왜 Seriaizer의 이름이'PostSerializer'입니까? –

+0

POST 메서드 때문에 분리 된 serializer 인'ObjectPostSerializer'를 만들려고했기 때문에. 다른 메소드에는'ObjectSerializer'가 있습니다. – wahtdbogh

관련 문제