phone
, profile_photo
및 first_name
, last_name
, email
과 같은 장고 기본 사용자 모델의 일부 필드가 포함 된 UserProfile 모델이 있는데이 필드 중 일부를 업데이트하려고합니다.Django RF로 장고 사용자 모델에 패치하는 방법은 무엇입니까?
models.py
class UserProfile(models.Model):
user = models.ForeignKey(User, verbose_name="User")
phone = models.CharField(max_length=16, verbose_name="Phone")
profile_photo = models.ImageField(null=True, blank=True, upload_to=user_directory_path, verbose_name="Profile Photo")
serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('url', 'first_name', 'last_name', 'email')
class UserProfileSerializer(serializers.ModelSerializer):
user = UserSerializer(partial=True)
class Meta:
model = UserProfile
fields = '__all__'
def create(self, validated_data):
user_profile = UserProfile.objects.create(**validated_data)
return user_profile
views.py
class UserProfileViewSet(viewsets.ModelViewSet):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer
authentication_classes = (TokenAuthentication,)
@detail_route(methods=['PATCH'], url_path='update-partial')
def user_profile_update_partial(self, request, pk=None):
profile = UserProfile.objects.get(id=pk)
serializer = self.get_serializer(profile, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
나는 0123을 보내는 경우, phone
, first_name
또는 last_name
데이터는 @detail_route
입니다. phone 및 profile_photo 필드 만 업데이트 할 수 있습니다. 또한 profile_photo
데이터가 전송되지 않을 때 잘못된 요청 오류가 발생합니다.
PATCH
방법으로 partial_update
을 어떻게 구현할 수 있습니까?
덕분에 (당신이 암호를 업데이트하려는 경우, 당신은 이전에 인코딩 된 암호를 만들 데이터베이스에 원시 암호를 저장
make_password
방법을 사용 필요)UserSerializer
라는 이름의 또 다른 시리얼로 업데이트합니다. 사실 나는 [django의 중첩 된 필드 다루기] (http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects)로이 문제를 해결했습니다. 하지만 ImageField 모델 필드를 업데이트하는 데 문제가 있습니다. 오류 : '제출 된 데이터가 파일이 아닙니다. 양식의 인코딩 유형을 확인하십시오 .' – bullception