0
phone
,profile_photo
、first_name
、last_name
、email
などのDjangoデフォルトユーザーモデルのフィールドがあり、これらのフィールドの一部を更新しようとしているUserProfileモデルがあります。DjangoのRFでDjangoのユーザーモデルにパッチを当てるには?
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
電話番号とプロフィール写真フィールドのみを更新できます。また、profile_photo
データが送信されないときに、Bad Requestエラーが発生する。
メソッドでpartial_update
を実装するにはどうすればよいですか?
感謝を(パスワードを更新したい場合は、前にエンコードされたパスワードを作成し、データベースに生のパスワードを保存する
make_password
メソッドを使用して必要があります)UserSerializer
をという名前の別のシリアライザでそれを更新します。実際に私は[djangoのネストされたフィールドを扱う](http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects)でこの問題を解決しました。しかし、今はImageFieldモデルフィールドの更新に問題があります。エラーは: '送信されたデータはファイルではありませんでした。フォームのエンコーディングタイプを確認してください.' – bullception