我在序列化器中使用了许多来创建新字段。我需要实现更新,以便添加新字段并保留现有字段不变。下面给出了我的代码。
模型.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)
序列化器.py
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
View .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)
我尝试通过提供模型名称来使用 django 的更新支持,同时将其传递给序列化器以调用更新方法。但它说当 Many=True 时,不支持 update ,只支持 create 方法。建议在我的序列化器中使用 ListSerializer
类并覆盖 `.update() 。我无法理解如何使用它。我只想更新我的字段。
最佳答案
序列化器实例化的参数应该是一个实例,而不是一个模型
。
serializer = AppSerializer(ThirdPartyApps, data=data, context={"auth_token_id": a_id}, many=True)
您需要将 ThirdPartyApps
替换为您要更新的实例列表。
您还需要遵循 documentation关于如何处理多次更新。
关于python - django api 支持使用 Many=True 更新序列化器,仅创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575333/