Skip to main content
 首页 » 编程设计

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

2024年08月16日35webabcd

我正在 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) 
    ...