Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django rest框架中,如何在follower和following系统中获得用户名及其id?_Python_Django_Django Rest Framework - Fatal编程技术网

Python 在Django rest框架中,如何在follower和following系统中获得用户名及其id?

Python 在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

我想创建一个追随者和追随者系统,我创建了,但我想添加用户名以及他们的追随者用户id或用户id。我怎么做

models.py serializers.py/UserSerializers followerserializer和FollowerSerializes 视图集 输出 我在输出中得到了下面的和追随者列表,但是在这个列表中,我还想添加一个用户名和他们的下面的用户id或用户id


有人知道吗?

您可以在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)