У меня есть следующая структура данных «многие ко многим» в моем приложении django rest:
class User(Model):
name = models.CharField(max_length=64)
memberships = models.ManyToManyField('Membership', through='UserMembership', related_name='users')
def __str__(self):
return "{}".format(self.name)
class Membership(Model):
name = models.CharField(max_length=64)
def __str__(self):
return "{}".format(self.name)
class UserMembership(Model):
user = models.ForeignKey('User', on_delete=models.CASCADE)
membership = models.ForeignKey('Membership', on_delete=models.CASCADE)
reason = models.CharField(max_length=64)
Когда я хочу перечислить всех пользователей, я получаю:
{
id: 1,
name: "name-a",
memberships: [
{
id: 1,
name: "member-a"
}, ...
]
}
но я действительно хочу включить поле "причина"
{
id: 1,
name: "name-a",
memberships: [
{
id: 1,
name: "member-a",
reason: "somereason"
}, ...
]
}
Но как мне изменить набор запросов?
User.objects.all().values('members__usermember')
не работает, к сожалению ...
кто-нибудь может поддержать?
EDIT:
сериализаторы:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'name', 'memberships')
class MembershipSerializer(serializers.ModelSerializer):
class Meta:
model = Membership
fields = ('id', 'name')