Python 在Django rest框架中,如何在follower和following系统中获得用户名及其id?
我想创建一个追随者和追随者系统,我创建了,但我想添加用户名以及他们的追随者用户id或用户id。我怎么做 models.py serializers.py/UserSerializers followerserializer和FollowerSerializes 视图集 输出 我在输出中得到了下面的和追随者列表,但是在这个列表中,我还想添加一个用户名和他们的下面的用户id或用户idPython 在Django rest框架中,如何在follower和following系统中获得用户名及其id?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想创建一个追随者和追随者系统,我创建了,但我想添加用户名以及他们的追随者用户id或用户id。我怎么做 models.py serializers.py/UserSerializers followerserializer和FollowerSerializes 视图集 输出 我在输出中得到了下面的和追随者列表,但是在这个列表中,我还想添加一个用户名和他们的下面的用户id或用户id 有人知道吗?您可以在userfollowing模型中创建一个username字段 看起来像这样 class Use
有人知道吗?您可以在userfollowing模型中创建一个username字段 看起来像这样
class UserFollowing(models.Model):
user_id = models.ForeignKey(User, related_name="following", on_delete=models.CASCADE)
following_user_id = models.ForeignKey(User, related_name="followers",on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True, db_index=True)
username = models.Charfield(max_length=200, null=True)
并使用signals将用户名存储在username字段中,以便序列化后获得username列
"following": [
{
"id": 19,
"following_user_id": 14,
"created": "2021-04-30T17:42:31.491779Z",
"username":"maria"
}
],
"followers": [
{
"id": 24,
"user_id": 13,
"created": "2021-04-30T17:48:56.153387Z",
"username":"angel"
},
如果我猜对了,你呢
class UserFollowing(models.Model):
...
def __str__(self):
f"{self.user_id.username} follows {self.following_user_id.username}"
def getfolowers(self): # Get my followers object
# return a query set of who is following me
return UserFollowing.objects.filter(following_user_id=self.id)
我还找到了另一个解决方案,只需在following和follower序列化程序中编写这行代码。username=serializers.ReadOnlyField(source='following\u user\u id.username')。它帮助我。顺便说一句,谢谢你,我感谢你的回答哇,这是一种更有效的方式,谢谢你分享。我以前尝试过这种方式,但无法解决我的问题。@MalavMevada抱歉。我不擅长DRF。我只是和ORM一方玩。我很确定如果你花足够的时间玩django shell,你会做得更好。祝你好运
class UserFollowingViewSet(viewsets.ModelViewSet):
serializer_class = FollowingSerializer
queryset = UserFollowing.objects.all()
class UserFollowerViewSet(viewsets.ModelViewSet):
serializer_class = FollowersSerializer
queryset = UserFollowing.objects.all()
{
"id": 11,
"first_name": "",
"username": "John",
"last_name": "",
"email": "",
"date_joined": "2021-04-30T08:43:48.577328Z",
"following": [
{
"id": 19,
"following_user_id": 14,
"created": "2021-04-30T17:42:31.491779Z"
}
],
"followers": [
{
"id": 24,
"user_id": 13,
"created": "2021-04-30T17:48:56.153387Z"
},
{
"id": 20,
"user_id": 14,
"created": "2021-04-30T17:46:38.001047Z"
}
]
},
class UserFollowing(models.Model):
user_id = models.ForeignKey(User, related_name="following", on_delete=models.CASCADE)
following_user_id = models.ForeignKey(User, related_name="followers",on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True, db_index=True)
username = models.Charfield(max_length=200, null=True)
"following": [
{
"id": 19,
"following_user_id": 14,
"created": "2021-04-30T17:42:31.491779Z",
"username":"maria"
}
],
"followers": [
{
"id": 24,
"user_id": 13,
"created": "2021-04-30T17:48:56.153387Z",
"username":"angel"
},
class UserFollowing(models.Model):
...
def __str__(self):
f"{self.user_id.username} follows {self.following_user_id.username}"
def getfolowers(self): # Get my followers object
# return a query set of who is following me
return UserFollowing.objects.filter(following_user_id=self.id)