序列化程序包括用户';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'