Я делаю университетский проект, который требует от меня реализации веб-приложения с использованием API в качестве бэкэнда, и я решил использовать для этого DRF, но у меня сейчас есть некоторые проблемы.
Я пытаюсь переопределить метод списка в представлении, чтобы отображать только некоторые поля при получении списка всех записей аэропортов, но все же все поля возвращаются в ответе.
Модель:
class Airport(models.Model):
code = models.CharField(max_length=10)
name = models.TextField()
carriers = models.ManyToManyField(Carrier, related_name='airports')
def __str__(self):
return self.name
Serializer:
class AirportSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Airport
fields = ('id', 'name', 'code', 'url', 'carriers')
Вид:
class AirportView(viewsets.ModelViewSet):
queryset = models.Airport.objects.all()
serializer_class = AirportSerializer
def list(self, request):
airports = models.Airport.objects.only('id', 'name', 'code')
data = AirportSerializer(airports, many=True, context={'request': request}).data
return Response(data)
Ответ:
{
"id": 4,
"name": "Leo",
"code": "Test",
"url": "http://localhost:8000/api/airports/4/",
"carriers": []
},
{
"id": 5,
"name": "asdasd",
"code": "aasdasd",
"url": "http://localhost:8000/api/airports/5/",
"carriers": [
"http://localhost:8000/api/carriers/1/"
]
},
{
"id": 6,
"name": "asdasd",
"code": "aasdasd",
"url": "http://localhost:8000/api/airports/6/",
"carriers": [
"http://localhost:8000/api/carriers/1/"
]
}
Как я могу решить это?
Есть ли лучший способ сделать это, я имею в виду не использовать метод QuerySet.only?