django-rest-framework 使用 ManyToManyField 的 related_name 获取关注者
django-rest-framework getting followers using related_name of ManyToManyField
所以我正在创建追随者系统,但是有一个问题。一切正常。但在追随者序列化程序中,我想要用户名和其他用户详细信息。
models.py
class Follow(models.Model):
user = models.OneToOneField(User,related_name="user" ,on_delete=models.CASCADE)
''' to obtain user ' eeee = User.objects.first() , eeee.user' '''
following = models.ManyToManyField(User,related_name='following_user',blank=True)
''' to obtain followers ' eeee.following_user.all()' '''
''' to obtain following ' eeee.user.following.all()' '''
def __str__(self):
return self.user.username
后面的字段中,user.following.all()用于获取request.user[=38=的manytomany字段中的用户] 和
following_user.all() 用于获取在其以下字段中添加了 request.user 的所有用户。
serializers.py
class FollowerSerializer(ModelSerializer):
user = UserSerializer(many=False)
follower = SerializerMethodField()
class Meta:
model = Follow
fields = ('user','follower')
def get_follower(self, obj):
context = self.context
request = context.get("request")
return request.user.following_user.all().values()
我在这里序列化所有在他们的以下字段中添加了 request.user 的用户
views.py
class FollowerView(RetrieveAPIView):
queryset = Follow.objects.all()
serializer_class = FollowerSerializer
permission_classes = [IsAuthenticated]
lookup_field = 'id'
api
{
"user": {
"name": "eeee"
},
"is_follower": [
{
"id": 2,
"user_id": 9
},
{
"id": 5,
"user_id": 16
},
{
"id": 3,
"user_id": 10
}
]
}
这些是 api 我从所有在他们的以下列表中添加了 request.user 的用户那里得到的。
这里的问题是我从密钥 user_id 中获取用户的 pk。但我想要用户名和其他信息,如电子邮件、拥有该主键的用户的全名。那么我该如何实现呢?
修改serializers.py中的get_follower方法如下:
def get_follower(self, obj):
context = self.context
request = context.get("request")
qs = request.user.following_user.all()
data = [{'id': obj.pk, 'user_id': obj.user_id, 'name': obj.req_field} for obj in qs]
return data
所以我正在创建追随者系统,但是有一个问题。一切正常。但在追随者序列化程序中,我想要用户名和其他用户详细信息。
models.py
class Follow(models.Model):
user = models.OneToOneField(User,related_name="user" ,on_delete=models.CASCADE)
''' to obtain user ' eeee = User.objects.first() , eeee.user' '''
following = models.ManyToManyField(User,related_name='following_user',blank=True)
''' to obtain followers ' eeee.following_user.all()' '''
''' to obtain following ' eeee.user.following.all()' '''
def __str__(self):
return self.user.username
后面的字段中,user.following.all()用于获取request.user[=38=的manytomany字段中的用户] 和 following_user.all() 用于获取在其以下字段中添加了 request.user 的所有用户。
serializers.py
class FollowerSerializer(ModelSerializer):
user = UserSerializer(many=False)
follower = SerializerMethodField()
class Meta:
model = Follow
fields = ('user','follower')
def get_follower(self, obj):
context = self.context
request = context.get("request")
return request.user.following_user.all().values()
我在这里序列化所有在他们的以下字段中添加了 request.user 的用户
views.py
class FollowerView(RetrieveAPIView):
queryset = Follow.objects.all()
serializer_class = FollowerSerializer
permission_classes = [IsAuthenticated]
lookup_field = 'id'
api
{
"user": {
"name": "eeee"
},
"is_follower": [
{
"id": 2,
"user_id": 9
},
{
"id": 5,
"user_id": 16
},
{
"id": 3,
"user_id": 10
}
]
}
这些是 api 我从所有在他们的以下列表中添加了 request.user 的用户那里得到的。 这里的问题是我从密钥 user_id 中获取用户的 pk。但我想要用户名和其他信息,如电子邮件、拥有该主键的用户的全名。那么我该如何实现呢?
修改serializers.py中的get_follower方法如下:
def get_follower(self, obj):
context = self.context
request = context.get("request")
qs = request.user.following_user.all()
data = [{'id': obj.pk, 'user_id': obj.user_id, 'name': obj.req_field} for obj in qs]
return data