我正在尝试构建一个储蓄API,只要用户不超过最大成员数,用户就可以获取可用的组列表并加入该组。我尝试了一系列方法,但似乎不起作用,每次尝试将用户添加到组时,似乎都想添加整个用户属性。
我创建了一个组模型,并通过ManytoMany字段将其连接到用户模型,因为用户可以加入多个组,而一个组可以容纳许多用户。我的问题出在序列化程序上,无论何时尝试添加用户
groups.model
class Groups(models.Model):
name = models.CharField(max_length = 50, unique = True)
group_id = models.UUIDField(default = uuid.uuid4, editable = False)
max_no_members = models.PositiveIntegerField()
savings_amount = models.PositiveIntegerField()
savings_type = models.CharField(max_length = 10, default = 'Monthly')
description = models.TextField(blank=True)
begin_date = models.DateField()
created_date = models.DateTimeField(auto_now_add=True)
searchable = models.BooleanField(default = True)
members = models.ManyToManyField(User, related_name='group_members')
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete
=models.CASCADE,related_name='group_admin' )
def __str__(self):
return self.name
groups.serializer
#List of Memebers
class GroupMembersListSerializer(serializers.HyperlinkedModelSerializer):
# users = UserSerializer(many=True, read_only = True)
class Meta:
model = Groups
fields = ['members','name']
#Join a Group
class JoinGroupSerializer(serializers.ModelSerializer):
users_to_join = UserSerializer(many=True, read_only = True, source =
'User')
class Meta:
model = Groups
fields = ['members','users_to_join']
groups.views
#Create Group
class GroupCreateAPIView(CreateAPIView):
queryset = Groups.objects.all()
serializer_class = GroupCreateSerializer
permission_classes = [IsAuthenticated]
def perform_create(self, serializer):
serializer.save(created_by= self.request.user, members =
[self.request.user])
#Members list Group
class GroupMembersList(RetrieveAPIView):
queryset = Groups.objects.all()
serializer_class = GroupMembersListSerializer
permission_classes = [IsAuthenticated,IsOwnerOrReadOnly]
#Join Group
class GroupJoinAPIView(CreateAPIView):
queryset =
Groups.objects.annotate(arr=ArrayAgg('members')).values_list('id', 'arr')
serializer_class = JoinGroupSerializer
permission_classes = [IsAuthenticated]
def perform_create(self, serializer):
print(sys.stderr, self.queryset)
if self.request.user.id in self.queryset.all():
return 'User already in the group'
else:
list(self.queryset.all()).append(self.request.user.id)
serializer.save()