2016-05-23 10 views
0

Jetzt kann ich neue Daten von json an meine Django-App senden, aber kann die Daten nicht aktualisieren oder löschen. Ich versuche, die Update-Methode in der serializer.py zu überschreiben, aber es funktioniert immer noch nicht. Die Daten behalten ursprüngliche Werte bei.Django REST: Wie man Daten in Nested ModelSerializer (Update) einfügt

Meine Frage ist, wie Sie alle Daten auf einmal zu aktualisieren und Daten wie subtaskdata, friendsdata oder chatroomdata löschen.

Teil meiner serializer.py

class SubtaskDataSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = SubtaskData 
     fields = ("subtask_name","subtask_deadline","subtask_completion", 
       "subtask_importance","subtask_item") 
     depth = 3 

class TaskDataSerializer(serializers.ModelSerializer): 
    SubtaskDatas = SubtaskDataSerializer(many = True) 
    class Meta: 
     model = TaskData 
     fields = ("task_name", "task_is_group", 
       "task_time", "task_score", "task_member_list", 
       "task_bulletin","SubtaskDatas") 
     read_only_fields = ('SubtaskDatas',) 
     depth = 2     

class FriendsDataSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = FriendsData 
     fields = ("friend_name","friend_account") 
     depth = 2 


class UserDataSerializer(serializers.ModelSerializer): 
    TaskDatas = TaskDataSerializer(many = True) 
    FriendsDatas = FriendsDataSerializer(many = True) 
    ChatroomDatas = ChatroomDataSerializer(many = True) 
    photo = Base64ImageField(
     max_length=None, use_url=True, 
    ) 
    class Meta: 
     model = UserData 
     fields = ("pk","account","password","username","gender","score", 
       "photo","TaskDatas","FriendsDatas","ChatroomDatas") 
     read_only_fields = ('TaskDatas','FriendsDatas','ChatroomDatas',) 
     depth = 1 

views.py

@api_view(['GET','POST']) 
def jobterm_list(request, format=None): 

    if request.method=="GET": 
     UserDatas =list(UserData.objects.all()) 
     serializer = UserDataSerializer(UserDatas,many=True) 
     return Response(serializer.data) 


    elif request.method == 'POST': 
     serializer = UserDataSerializer(data=request.data) 

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



@api_view(['GET', 'PUT', 'DELETE']) # 
def jobterm_detial(request,pk, format=None): 
    try: 
     User_Data = UserData.objects.get(pk=pk) 
    except UserData.DoesNotExist: 
     return Response(status=status.HTTP_404_NOT_FOUND) 

    if request.method == "GET": 
     serializer = UserDataSerializer(User_Data) 
     return Response(serializer.data) 

    elif request.method == "PUT": 
     serializer = UserDataSerializer(User_Data,data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data) 
     else: 
      return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST) 

    elif request.method == "DELETE": 
     User_Data.delete() 
     return Response(status=status.HTTP_204_NO_CONTENT) 

Antwort

0

Schließlich versuche ich update() -Methode entsprechend wie folgt zu definieren.

def update(self, instance, validated_data): 
    instance.account = validated_data['account'] 
    instance.password = validated_data['password'] 
    instance.username = validated_data['username'] 
    instance.gender = validated_data['gender'] 
    instance.score = validated_data['score'] 
    instance.photo = validated_data['photo'] 

    Friends_Datas = User_Datas.get('FriendsDatas') 
    for friend in Friends_Datas: 
     friendsdatas, _ = FriendsData.objects.update_or_create(
      {'friend_name': friend.get('friend_name')}, 
      friend_account = friend.get('friend_account'), 
      usersData_id = instance) 

    Task_Datas = User_Datas.get('TaskDatas') 
    for task in Task_Datas: 
     taskdatas, _ = TaskData.objects.update_or_create(
      { 
      'task_is_group' : task.get('task_is_group'), 
      'task_time' : task.get('task_time'), 
      'task_score' : task.get('task_score'), 
      'task_member_list' : task.get('task_member_list'), 
      'task_bulletin' : task.get('task_bulletin'), }, 
      task_name = task.get('task_name'), 
      userData_id = instance 
            ) 
     Subtask_Datas = task.get('SubtaskDatas') 
     for subtask in Subtask_Datas: 
      subtaskdatas = SubtaskData.objects.update_or_create(
       {'subtask_deadline' : subtask.get('subtask_deadline'), 
       'subtask_completion' : subtask.get('subtask_completion'), 
       'subtask_importance' : subtask.get('subtask_importance'), 
       'subtask_item' : subtask.get('subtask_item'), } 
       ,subtask_name = subtask.get('subtask_name'), 
       taskData_id = taskdatas     
            ) 


    Chatroom_Datas = User_Datas.get('ChatroomDatas') 
    for chatroom in Chatroom_Datas: 
     chatroomdatas, _ = ChatroomData.objects.update_or_create(
      {'chatroom_contents' : chatroom.get('chatroom_contents'),}, 
      chatroom_member = chatroom.get('chatroom_member'), 
      userdata_cid = instance 
      ) 

    return instance