使用嵌套关系时的AttributeError

时间:2013-07-29 18:38:16

标签: django django-rest-framework

当我尝试在两个序列化器之间创建嵌套关系时,我收到了一个AttributeError。奇怪的是,我正在做与另一个API完全相同的事情,但这次我没有让它工作。这是代码:

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = get_user_model()
        fields = ('id', 'last_login','username', 'created')

class NotificationSerializer(serializers.ModelSerializer):
    user_id = UserSerializer()

    class Meta:
        model = Notification
        fields = ('id', 'user_id', 'type', 'parent_id', 'created', 'modified', 'seen')

以及相关模型:

class Notification(models.Model):
    user = models.ForeignKey(User)
    type = models.CharField(max_length=255)
    parent_id = models.IntegerField()
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    seen = models.SmallIntegerField(default=0)

    def __unicode__(self):
        return self.type

    class Meta:
        db_table = 'notification'

class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=255, unique=True)
    id = models.IntegerField(primary_key=True)
    created = models.DateTimeField(auto_now=True)
    tag = models.ManyToManyField(Tag)

    USERNAME_FIELD = 'username'

    objects = MyUserManager()

    class Meta:
        db_table = 'user'

错误:

Exception Type: AttributeError
Exception Value:    
'long' object has no attribute 'id'
Exception Location: /lib/python2.7/site-packages/rest_framework/fields.py in get_component, line 55

任何人都可以帮我解决这个错误吗?正常的主键关系有效,但我肯定希望获得嵌套关系。

1 个答案:

答案 0 :(得分:2)

由于您的Notification模型有一个名为user的字段,我认为您应该使用它而不是user_id

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

    class Meta:
        model = Notification
        fields = ('id', 'user', 'type', 'parent_id', 'created', 'modified', 'seen')

另一个小小的问题是你真的想要创造:

id = models.IntegerField(primary_key=True) 
自定义User模式中的

?默认情况下,User模型已经有一个名为id的字段,它是PK。