django-rest-framework Instagram 喜欢的追随者系统
django-rest-framework Instagram like follower system
所以事情是当经过身份验证的用户(我们称之为用户 1)关注另一个用户(我们称之为用户 2)时。然后 user2 被添加到 user1 的关注列表中,user1 应该自动添加到 user2 的关注者 list.This 我想要实现的目标。谁能帮我解决逻辑问题?
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')
serializers.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]
您需要添加一个字段来捕获关注者 ID,以便在关注序列化程序中创建,因为您一次只能创建一个关注者。
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
所以事情是当经过身份验证的用户(我们称之为用户 1)关注另一个用户(我们称之为用户 2)时。然后 user2 被添加到 user1 的关注列表中,user1 应该自动添加到 user2 的关注者 list.This 我想要实现的目标。谁能帮我解决逻辑问题?
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')
serializers.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]
您需要添加一个字段来捕获关注者 ID,以便在关注序列化程序中创建,因为您一次只能创建一个关注者。
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