当我尝试在两个序列化器之间创建嵌套关系时,我收到了一个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
任何人都可以帮我解决这个错误吗?正常的主键关系有效,但我肯定希望获得嵌套关系。
答案 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。