Как получить и ID, и имена из поля Many to Many в Django

Я создаю приложение для обмена сообщениями, как Whatsapp. У меня есть модель профиля, в которой есть комнаты как отношение "многие ко многим". То есть у каждого пользователя будет список комнат, в которые он добавлен в базе данных профиля. Я использую Rest Framework для получения информации о комнатах. Я получаю только ID комнат каждый раз, когда я получаю информацию из API. Но было бы намного проще и оптимизированнее для моего приложения, если бы я мог также получать имена комнат и ID через Api профиля, в котором есть комнаты как отношение "многие ко многим". Как я могу сохранить оба поля Name & id в поле Many to Many?

#model.py

from django.db import models

# Create your models here.


class Room(models.Model):
    name = models.CharField(max_length=100,unique=True,blank=True,null=True)

    def __str__(self):
        return self.name

class Profile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    rooms = models.ManyToManyField(Room)

    def __str__(self):
        return self.user.username

Serializers.py

from django.contrib.auth.models import User
from rest_framework import serializers
from App.models import *



class roomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Room
        fields = '__all__'

class userSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

class profileSerializer(serializers.ModelSerializer):



    class Meta:
        model = Profile
        fields = '__all__'


views.py

from rest_framework.response import Response
from rest_framework.decorators import api_view
from App.models import *
from .serializers import *
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView

class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
    @classmethod
    def get_token(cls, user):
        token = super().get_token(user)

        # Add custom claims
        token['name'] = user.username
        # ...

        return token

class MyTokenObtainPairView(TokenObtainPairView):
    serializer_class = MyTokenObtainPairSerializer




@api_view(['GET','POST'])
def GetRoomData(request):
    if request.method=='GET':
        rooms = Room.objects.all()
        serializer = roomSerializer(rooms,many=True)
    if request.method == 'POST':
        serializer = roomSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
    return Response(serializer.data)

@api_view(['GET'])
def getUserData(request):
    profile = User.objects.all()
    serializer = userSerializer(profile,many=True)
    return Response(serializer.data)

@api_view(['GET','PUT'])
def getProfileData(request,pk):
    if request.method == 'GET':
        profile = Profile.objects.get(user=pk)
        serializer = profileSerializer(profile)
    if request.method=='PUT':
        profile = Profile.objects.get(user=request.data['user'])
        serializer = profileSerializer(profile, data=request.data)  
        if serializer.is_valid():
            serializer.save()
        else:
            return Response(serializer.errors, status=400)
    return Response(serializer.data)

Вернуться на верх