2014-02-17 2 views
1

특정 json 입력에 대해 django-rest-framework을 사용하여 API 끝점을 만듭니다.django rest framework 중첩 된 객체가 동작을 만들거나 생성합니다.

class Category(models.Model): 
    name = models.CharField(max_length=10) 
    slug = models.SlugField() 


class Post(models.Model): 
    category = models.ForeignKey() 
    title = models.CharField(max_length=100) 
    text = models.CharField(max_length=256) 

을 내 시리얼 라이저는 간단한 모델의 시리얼입니다 : 내가 지금과 같은 두 개의 관련된 모델을 가지고 (의 단 하나 개의 카테고리를 가질 수 있습니다 후 가정하자)

class CategorySerializer(ModelSerializer): 
    id = serializers.IntegerField(required=True) 

    class Meta: 
     model = Category 


class PostSerializer(ModelSerializer): 
    id = serializers.IntegerField(required=True) 
    category = CategorySerializer() 

    class Meta: 
     model = Post 

내 API를보기도 매우 간단하다 :

{ 
    "id": 10, 
    "pk": 10 
    "title": "Some title", 
    "text": "Some text", 
    "category": { 
     "id": 15, 
     "pk": 15 
     "name": "Best category", 
     "slug": "best-category" 
    } 
} 
:
class PostAPIView(mixins.CreateModelMixin, GenericAPIView): 
    serializer_class = PostSerializer 
    permission_classes = (IsAuthenticated,) 

이제 게시물을 작성하기 위해 나는이 같은 JSON 입력을 구문 분석 할 필요가

여기서 'pk'매개 변수가 중요하기 때문에 json에서 제공하는 정확한 pk를 사용하여 db에 데이터를 만들길 원합니다. 이제 게시물 요청을하면 ID가 10 인 게시물이 있고 id가 15 인 카테고리는 모두 정상이며 db에 새 레코드가 기록됩니다.하지만 rest-framework에서 [ 'Post id 10 already exists'], 일치하는 레코드를 대신 입력에 따라 업데이트하고 싶습니다. 어떻게해야합니까?

답변

0

업데이트 믹스을 추가하기 만하면 CreateModelMixin처럼 가져 오기하면됩니다. 이 mixin은 원하는대로 작업 할 수있는 업데이트 및 부분 업데이트 메서드를 구현합니다. POST을 보낼 수 없으므로 PUT 또는 PATCH이 필요합니다. POST에서이 작업을 수행하기를 원한다면 뷰 작성 방법을 직접 구현하는 것이 좋습니다.

+1

만약 put/patch를 추가하면 나머지 프레임 워크는 look_up 필드와 모델을 필요로합니다.이 입력으로 여러 모델로 작업하고 있기 때문에 제공 할 수 없습니다. – balkan

관련 문제