gpt4 book ai didi

python - Django-Rest-Framework 'str' 对象没有属性 'id'

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:43 25 4
gpt4 key购买 nike

我正在 DRF 中创建一个调用以发布到站点。我有点困惑为什么会收到此错误。我不明白为什么这期望它是一个 str。我知道有类似的帖子,但他们仍然无法解决问题。

错误

AttributeError: 'str' object has no attribute 'id'
[03/Apr/2018 10:55:12] "POST /api/user/UserProfile/1/ HTTP/1.1" 500 83982

serializer.py 看起来像,如果我删除 instance.id,我会得到同样的错误,但只是针对下一行。

from rest_framework import serializers
from api.models import UserProfile
from django.contrib.auth.models import User


class UserProfileSerializer(serializers.Serializer):
# id = serializers.UUIDField()
class Meta:
model = UserProfile

def create(self, validated_data):
return UserProfile.objects.create(**validated_data)

def update(self, instance, validated_data):
instance.id = validated_data.get('profile_id', str(instance.id))
instance.user_id = validated_data.get('user_id', instance.user_id)
instance.save()
return instance

查看

@csrf_exempt
def user_profile_list(request, user_id):
try:
userid = user_id
except userid.DoesNotExist:
return HttpResponse(status=404)

if request.method == 'GET':
uprofile = UserProfile.objects.all().values()
list2 = list(uprofile)
return JsonResponse(list2, safe=False)

elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = UserProfileSerializer(userid, data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)

urls.py

url(r'^api/user/UserProfile/(?P<user_id>[0-9]+)/$', userprofile.user_profile_list),

最佳答案

您传递给序列化程序 userid 而不是用户对象。要使用序列化程序更新对象,您应该将实例作为第一个参数传递。将 View 更改为此:

elif request.method == 'POST':
data = JSONParser().parse(request)
user = User.objects.get(id=userid)
serializer = UserProfileSerializer(user, data=data)
...

关于python - Django-Rest-Framework 'str' 对象没有属性 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com