2014-10-22 30 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'