私は自分のDRFに以下のフィールドを保存しました。Django Rest Frameworkへの投稿中にいくつかのフィールドを除外
- バイオ
- サイト
- PHONENO
- 性別
- アバター
私が反応し、ネイティブのフロントエンドとして使用しています。ユーザープロフィールを更新している間、私は変更をサーバーに投稿したいだけです。しかし、残りのAPIに投稿するときは、フォームデータにすべての値を投稿する必要があります。アバターは変更されていないので、 uriは動作していないようです。 別のシリアライザを作成し、PUTを使ってデータをサーバーに渡してみましたが、どちらも動作しませんでした。私はエラーを取得し続けます。
「詳細」:「マルチパートフォーム解析エラー - マルチパートの無効な境界:なし」渡されたURIが有効ではありませんので、私は推測
はおそらくありません。私もシリアライザでget_validation_exclusions()メソッドを使用しようとしましたが、どちらも動作しません。変更された他のすべてのフィールドを更新する際に、アバターの投稿をオプションにするにはどうすればよいですか?
views.py
class ProfileView(APIView):
serializer_class = ProfileSerializer
def get(self, request, format=None):
snippets = Profile.objects.filter(pk=request.user.id)
serializer = ProfileSerializer(snippets, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = ProfileSerializer(data=request.data)
if serializer.is_valid():
user= User.objects.get(pk=request.user.id)
user.profile.bio=request.data["bio"]
user.profile.website=request.data["website"]
user.profile.gender=request.data["gender"]
user.profile.phoneno=request.data["phoneno"]
user.profile.avatar=request.data["avatar"]
user.profile.save()
user.save()
return Response(serializer.data,status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, format=None):
snippet = User.objects.filter(pk=request.user.id)
serializer = ChangeProfileSeralizer(snippet, data=request.data)
if serializer.is_valid():
user= User.objects.get(pk=request.user.id)
user.profile.bio=request.data["bio"]
user.profile.website=request.data["website"]
user.profile.gender=request.data["gender"]
user.profile.phoneno=request.data["phoneno"]
user.profile.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
serializers.py
class ChangeProfileSeralizer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Profile
fields = ('website', 'phoneno','gender','bio')
class ProfileSerializer(serializers.HyperlinkedModelSerializer):
avatar=serializers.ImageField(max_length=None,use_url=True)
website = serializers.CharField(required=False)
phoneno = serializers.CharField(required=False)
gender = serializers.CharField(required=False)
avatar = serializers.ImageField(required=False)
class Meta:
model = Profile
fields = ('bio','website','phoneno','gender','avatar')
def get_validation_exclusions(self,instance=None):
exclusions = super(ProfileSerializer, self).get_validation_exclusions(instance)
return exclusions +['avatar']
編集(プロファイルモデル):
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,primary_key=True)
bio = models.TextField(max_length=500, blank=True)
website = models.TextField(max_length=200, blank=True)
phoneno = models.TextField(max_length=200, blank=True)
gender = models.TextField(max_length=200, blank=True)
avatar = models.ImageField('profile picture', upload_to='images/avatar/', default='/images/avatar/blank.png')
シリアライザのアバターImageFieldに 'required = False'を設定して、リクエストを送信するときにフィールドを除外しましたか? –