尝试获取字段值时的属性错误

Ian*_*ley 4 python django django-rest-framework

我正在使用django rest框架,我正在尝试使用的序列化器正在创建错误.我正在尝试做类似https://gist.github.com/anonymous/7463dce5b0bfcf9b6767的事情,但我仍然得到错误.模特是

class Visitor(models.Model):

user = models.OneToOneField(User)
check_ins = models.IntegerField(default=0)

@classmethod
def create(cls, username, email, password):
    user = User.objects.create_user(username, email, password)
    visitor = cls(user=user)
    visitor.save()
    return visitor

def __str__(self):
    return self.user.username
Run Code Online (Sandbox Code Playgroud)

以及默认的用户类和序列化程序

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model=User
        fields = ('username')

class VisitorSerializer(serializers.ModelSerializer):
    user = UserSerializer()

    class Meta:
        model=Visitor
        fields = ('id','check_ins','user')
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

尝试user在序列化程序上获取字段值时获得AttributeError VisitorSerializer.序列化程序字段可能名称不正确,并且与QuerySet实例上的任何属性或键都不匹配.原始异常文本是:'QuerySet'对象没有属性'user'.

Kev*_*own 11

问题是您在不设置many标志的情况下将查询集传递给序列化程序.错误告诉您序列化程序正在尝试访问queryset.user它应该访问的时间visitor.user,因此您需要通过传递告诉序列化程序有多个对象(而不是单个对象)many=True.