2016-08-04 5 views
0

私は、次のDjangoのモデルを持っている:ジャンゴレストフレームワーク3.4.0、カスタムを持つビューセットは、(作成)と多対多の関係

class Task(models.Model): 
    '''Task needed to complete a goal''' 
    title = models.CharField(max_length=200) 

class Issue(models.Model): 
    '''Issue from different forges''' 
    title = models.CharField(max_length=200, blank=True) 
    tasks = models.ManyToManyField(Task) 

私は次のシリアライザがあります

class TaskSerializer(serializers.ModelSerializer): 
    '''Serializer to represent the Task model''' 

    class Meta: 
     model = Task 
     fields = ("id", "title") 

class IssueSerializer(serializers.ModelSerializer): 
    '''Serializer to represent the issue model''' 

    tasks = TaskSerializer(read_only=True, many=True) 

    class Meta: 
     model = Issue 
     fields = ("title", "tasks") 

を今私のPOSTリクエストは、次のいずれかです。

{ 
    "id": null, 
    "title": "", 
    "tasks": [14] 
} 

問題のための空のタイトルで、私はこの1台のサーバ - を提供しますので、サイドだから私は、次のようにIssueViewSetの作成()を再定義する必要があります。

class IssueViewSet(viewsets.ModelViewSet): 
    '''ViewSet for viewing and editing Issue objects''' 
    queryset = Issue.objects.all().order_by('id') 
    serializer_class = IssueSerializer 

    def create(self, request): 
     serializer = IssueSerializer(data=request.data) 
     if serializer.is_valid(): 
      issue = Issue(title='test', tasks=serializer.validated_data['tasks']) 
      issue.save() 
      return Response({'status': 'issue created'}) 
     else: 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

私は今では、次のエラーがあります。

File "/views.py", line 32, in create 
    issue = Issue(title='test', tasks=serializer.validated_data['tasks']) 
KeyError: 'tasks' 

をそして実際、serializer.validated_dataが持っていないようですタスクキー。私はシリアライザやcreate()を定義することが不足しています。

答えて

0

tasksread_onlyと入力してIssueSerializerと入力しました。そのため、のキーはvalidated_dataにありません。

関連する問題