我正试图在数据库中保存()我的数据。但是我得到一个错误{'Hero_id':[ErrorDetail<string='Hero with this Hero_id already exists.',='unique'>]}
。
Models.py:
class Hero(models.Model):
Hero_id = models.IntegerField(auto_created=True, primary_key=True, serialize=False, verbose_name='Hero_id')
race = models.CharField(max_length=50, blank=True)
age = models.IntegerField(blank=True)
class_= models.CharField(max_length=50, blank=True)
Views.py:
class HeroSerializer(serializers.ModelSerializer):
class Meta:
model = Hero
fields = ['Hero_id', 'race', 'age', 'class_']
extra_kwargs = {
'race': {
'required': False,
'allow_null':True
},
'age': {
'required': False,
'allow_null':True
},
'class_': {
'required': False,
'allow_null':True
}
}
def PATCH(request):
if request.method == "PATCH":
stream = io.BytesIO(request.body)
data = JSONParser().parse(stream)
serializer = HeroSerializer(data=data["json"],partial=True)
if serializer.is_valid():
serializer.save()
return JsonResponse(data,save=False)
return JsonResponse(serializer.errors)
我的传入数据始终包含英雄id。
例如:{"json":{"Hero_id":"4", "race":"orc"}}
或{"json":{"Hero_id":"4", "race":"Human", "age":"34", "class_":"archer"}}
问题:
1) 如何根据Hero_id修补数据库中的特定行?
2) 如何传递请求。数据?我总是得到一个错误“WSGIRequest”对象没有属性“data”。
3) 在我的案例中JSONParser().parse(io.BytesIO(request.body))
和request.data
之间有什么区别吗
您需要将更新实例传递给序列化程序。没有它,djnago将尝试创建新对象:
顺便说一句,您可以使用^{} decorator来启用Django rest框架请求。在这种情况下,您不需要手动解析请求体
相关问题 更多 >
编程相关推荐