序列化程序包括用户';Django Rest框架中的s跟随者

序列化程序包括用户';Django Rest框架中的s跟随者,django,django-rest-framework,Django,Django Rest Framework,我有以下型号: 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, rel

我有以下型号:

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'
followers = UserBasicSerializers(required=False, many=True, source='to')
它工作得很好,但现在我需要让跟随者与用户嵌套。我的第一次尝试是创建一个UserBasicSerializer,如下所示:

class UserBasicSerializers(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name')
        read_only_field = 'username'
并将以下内容添加到用户序列化程序:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', ...some fields...)
        read_only_field = 'username'
followers = UserBasicSerializers(required=False, many=True, source='to')
但是,我得到AttributeError:Relationship对象没有属性名


谢谢大家!

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

借助以下技巧的一点帮助:, 您可以显示嵌套用户:

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'