2014-10-22 91 views
1

我有以下型号:串行包括用户的关注者在Django的REST框架

class User(AbstractUser): 
    ...some fields... 
    relationships = models.ManyToManyField('self', through='Relationship', symmetrical=False, related_name='related_to') 

class Relationship(models.Model): 
    from = models.ForeignKey(User, related_name='from') 
    to = models.ForeignKey(User, related_name='to') 
    type = models.IntegerField() 

我有以下的用户串行:

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('id', 'username', 'first_name', 'last_name', ...some fields...) 
     read_only_field = 'username' 

它的伟大工程,但现在我需要让追随者与用户嵌套。我第一次尝试是创建一个UserBasicSerializer这样的:

class UserBasicSerializers(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('id', 'username', 'first_name', 'last_name') 
     read_only_field = 'username' 

,并添加以下到用户串行:

followers = UserBasicSerializers(required=False, many=True, source='to') 

不过,我得到AttributeError错误:关系对象没有属性FIRST_NAME

谢谢您!

回答

0

你可以看到,而不是使用to相关的名称,你需要使用related_to,它指向一个实际的用户对象(to指向Relationship对象,而不是)。这就是为什么你会得到这个例外。

有以下提示的一点帮助:https://stackoverflow.com/a/24216503/1566605, 可以显示嵌套的用户:

class RecursiveField(serializers.Serializer): 
    def to_native(self, value): 
     return self.parent.to_native(value) 

class UserSerializer(serializers.ModelSerializer): 
    related_to = RecursiveField(many=True) 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'first_name', 'last_name', 'related_to') 
     read_only_field = 'username'