DRF:更新数据库

时间:2017-11-06 10:04:03

标签: python django django-rest-framework

我创建了一个api来创建用户。但现在我需要根据他们的id更新他们的信息。(我想为这个任务创建一个新的api。)

所以我写了以下内容:

views.py

class ProfileView(APIView):
    permission_classes = (AllowAny,)
    serializer_class = ProfileSerializer

    def update(self, request, *args, **kwargs):
        instance = self.get_object()
        instance.branch = request.data.get("branch")
        instance.year = request.data.get("year")
        instance.save()

        serializer = self.get_serializer(instance)
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)

        return Response(serializer.data)

serializers.py

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account

在我的模型中,我的字段为usernameemailbranchyearfull name。如果在注册时用户填写少量字段,并且在一段时间后他将填写其他字段(分支,年份)。我如何使它成为可能

1 个答案:

答案 0 :(得分:0)

serializers.py

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account

    def update(self, instance, validated_data):        
        instance.branch = validated_data.get('branch', instance.branch)
        instance.year = validated_data.get('year', instance.year)        
        instance.save()        
        return instance

views.py

class ProfileView(APIView):
    api_view = ['PUT']

    def put(self, request, format=None):
        data = request.DATA
        user_details = Account.objects.get(id=request.query_params.get("id"))   
        serializer = ProfileSerializer(user_details, data=data)

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

urls.py

from django.conf.urls import patterns
from django.conf.urls import url
from . import views

urlpatterns = patterns('',
    url(r'^user_details/', views.ProfileView),
)

使用以下路径访问您的PUT:/ api / userdetails /?id = 1

现在,根据用户ID更新用户信息(分支,年份)。