Я пытаюсь создать конечную точку API, которая будет предоставлять сводные данные о пользователе и группах, в которых он находится.
В моих текущих моделях User и UserGroup связаны с моделью членства.
Моя текущая проблема в том, что я не могу заставить работать список членов группы.
Я на правильном пути?Или есть лучший способ обработки сериализации / запросов моделей со многими отношениями?
Модели:
class UserGroup(models.Model):
group_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
description = models.CharField(max_length=200)
deleted = models.BooleanField(default=False)
class Membership(models.Model):
group = models.ForeignKey(UserGroup, on_delete=models.CASCADE, related_name="members")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_groups")
isAdmin = models.BooleanField(default=False)
Сериализаторы:
class MemberSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('first_name', 'last_name')
class MembershipSerializer(serializers.HyperlinkedModelSerializer):
name = serializers.ReadOnlyField(source='group.name')
description = serializers.ReadOnlyField(source='group.description')
members = MemberSerializer(source='group.members', read_only=True, many=True)
class Meta:
model = Membership
fields = ('name', 'description', 'members')
class UserSerializer(serializers.ModelSerializer):
groups = MembershipSerializer(source='user_groups', read_only=True, many=True)
class Meta:
model = User
fields = ('username', 'groups')
Токовый выход:
{
"username": "User 1",
"groups": [
{
"name": "Group 1",
"description": "Test Group",
"members": [
{}
]
},
{
"name": "Group 2",
"description": "Test Group 2",
"members": [
{}
]
}
]
}
Ожидается: «members» содержит список пользователей, входящих в группу пользователей.