Djangorest框架类Instagram跟踪系统

2024-05-10 04:03:42 发布

您现在位置:Python中文网/ 问答频道 /正文

所以问题是,当经过身份验证的用户(我们称之为user1)跟随另一个用户(我们称之为user2)时。然后user2被添加到user1的下面列表中,user1应该被自动添加到user2的跟随者列表中。谁能帮我解释一下逻辑吗

models.py

class Follower(models.Model):
    user = models.OneToOneField(UserModel,related_name="followers", verbose_name=_("User"), on_delete=models.CASCADE)
    follower_user = models.ManyToManyField(UserModel, verbose_name=_("Follower"),related_name='follower_user')


class Following(models.Model):
    user = models.OneToOneField(UserModel, related_name="following",unique=False, verbose_name=_("User"), on_delete=models.CASCADE)
    following_user = models.ManyToManyField(UserModel, verbose_name=_("Following"), related_name='following_user')

序列化程序.py

class FollowerSerializer(ModelSerializer):

    class Meta:
        model = Follower
        fields = ('user','follower_user')
        read_only_fields = ()


class FollowingSerializer(ModelSerializer):

    class Meta:
        model = Following
        fields = ('user','following_user')
        read_only_fields = () 

views.py

class FollowerView(ListAPIView):
    queryset = Follower.objects.all()
    serializer_class = FollowerSerializer
    permission_classes = [IsAuthenticated]


class FollowingView(ListCreateAPIView):
    queryset = Following.objects.all()
    serializer_class = FollowingSerializer
    permission_classes = [IsAuthenticated]

Tags: namepyfieldsverbosemodelsclassfollowingrelated
1条回答
网友
1楼 · 发布于 2024-05-10 04:03:42

您需要添加一个字段来捕获follower id,以便在followerserializer中创建,因为您一次只创建一个follower

class FollowingSerializer(ModelSerializer):
    new_following = serializers.PrimaryKeyRelatedField(queryset=UserModel.objects.all(), required=True, write_only=True)
    class Meta:
        model = Following
        fields = ('user', 'following_user', 'new_following')
        read_only_fields = ('following_user')

    def create(self, validated_data):
        user = validated_data['user']
        new_follwoing = validated_data['new_following']
        user.following.following_user.add(new_follwoing)
        new_follwoing.followers.following_user.add(user)

        return user.following

相关问题 更多 >