送信されたjsonデータをdjango-rest-frameworkによってdbに保存したいと思います。 問題は、関係を保存せずにエラーを返すことです。リレーションシップを持つmodelSerializerを保存する方法は? - django
怒鳴るスニペットは、私のモデルである:
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile', on_delete=models.CASCADE)
name = models.CharField(max_length=30)
family = models.CharField(max_length=50)
class Klass(models.Model):
title = models.CharField(max_length=50)
description = models.CharField(max_length=500)
teacher = models.ForeignKey(Profile, related_name='teacher', on_delete=models.CASCADE)
私はKlass
モデルをデシリアライズ/シリアライズするためにシリアライザの下に使用します。
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('pk', 'name', 'family')
class KlassSerializer(serializers.ModelSerializer):
teacher = ProfileSerializer()
class Meta:
model = Klass
fields = ('id', 'title', 'description', 'teacher')
JSONオブジェクトを準備してビューに送信すると、エラーが返されます。以下のビュークラスである:
class KlassView(APIView):
"""for SELECT, INSERT Queries"""
def get(self, request, pk):
# somthing
@csrf_exempt
def post(self,request, pk=None):
"""For Creating A Class"""
serializer = KlassSerializer(data=request.data)
if serializer.is_valid():
teacher = ProfileSerializer(request.data['teacher']['pk'])
serializer.teacher = teacher.data
serializer.save()
return Response({'data': serializer.data})
else:
return Response({'data': serializer.errors})
とエラーがある:
.create()
方法は、デフォルトで書き込み可能なネストされたフィールドをサポートしていません。 シリアライザmainp.serializers.KlassSerializer
の明示的な.create()
メソッドを記述するか、ネストされたシリアライザフィールドにread_only=True
を設定します。
dbに保存するには、KlassSerializer
に関係を保存するにはどうすればよいですか?
はちょうどKlassSerializer –
にModelSerializerのメソッドを作成する上書き私はメソッドを作成しようとしましたが、できません。それを書く方法を教えてください。ありがとう – msln