【问题标题】:Attribute error when attempting to get a value for field尝试获取字段值时出现属性错误
【发布时间】:2015-05-31 19:57:27
【问题描述】:

我正在使用 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

默认的用户类和序列化器是

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')

我收到此错误

尝试在序列化程序 VisitorSerializer 上获取字段 user 的值时出现 AttributeError。 序列化程序字段可能命名不正确,并且与 QuerySet 实例上的任何属性或键都不匹配。 原始异常文本为:“QuerySet”对象没有“用户”属性。

【问题讨论】:

  • 您确定您的访客模型的缩进是正确的吗?您的 Visitor 模型看起来还不错,但是 create 和 str 方法在您的类之外。

标签: python django django-rest-framework


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多