新しいフィールドを作成するためにシリアライザで多くを使用しています。新しいフィールドを追加して既存のフィールドをそのまま残すために、更新を実装する必要があります。 Mycodeは以下の通りです。通過する間に、私はモデル名を与えることによって、ジャンゴの更新プログラムのサポートを使用しようとした多くのシリアライザの更新= Trueのみ作成はdjango APIでサポートされています
class AppSerializer(serializers.ModelSerializer):
class Meta:
model = Apps
fields = ('app_name', 'auth_token_id')
def create(self, validated_data):
if "auth_token_id" in self.context:
id1 = self.context["auth_token_id"]
instance = self.Meta.model(**validated_data)
user_id = id1
if user_id is not None:
instance.auth_token_id = user_id
instance.save()
return instance
views.py
@api_view(['POST'])
def add_apps(request):
data = request.data
auth_token = request.META.get('HTTP_AUTHTOKEN', '')
auth_tok = Device.objects.get(auth_token=auth_token)
a_id = auth_tok.id
serializer = AppSerializer(ThirdPartyApps, data=data, context={"auth_token_id": a_id}, many=True)
if serializer.is_valid():
serializer.save()
content = collections.OrderedDict(
[('status', True), ('message', "Third party apps are saved")])
return Response(content, status=status.HTTP_200_OK)
else:
return Response(serializer.errors)
models.py
class Device(models.Model):
device_id = models.CharField(max_length=200)
auth_token = models.CharField(max_length=100)
class ThirdPartyApps(models.Model):
auth_token = models.ForeignKey(Device, on_delete=models.CASCADE)
app_name = models.CharField(max_length=100)
serializers.py更新メソッドを呼び出すシリアライザに渡します。しかし、many = Trueの場合、更新はサポートされていません。createメソッドのみがサポートされています。これは、ListSerializer
クラスを使用し、シリアライザで `.update()をオーバーライドすることを提案しています。私はそれを使用する方法を理解することができません。私はフィールドを更新したいだけです。
私はまったく同じ方法で試しましたが、many = Trueの場合は作成のみサポートされますが、更新はサポートされません。私はすでにドキュメンテーションのリンクを調べましたが、インスタンスシリアライザに明示的なidフィールドを追加する方法を理解できません。 –
このエラーが発生しています - シリアライザmany = Trueは複数の更新をデフォルトでサポートしていません。更新に関しては、挿入と削除をどう扱うべきかは不明です。複数の更新をサポートする必要がある場合は、 'ListSerializer'クラスを使用して' .update() 'をオーバーライドして、ビヘイビアを正確に指定することができます。 –
あなたは最初の質問でそのidのことを言及していない。マニュアルで説明されているように、更新機能を提供していませんでした。その質問を閉じて新しい質問を開始してください。 – Linovia