#django #django-rest-framework
#django #django-rest-framework
Вопрос:
Я пытаюсь создать приложение, которое позволяет мне загружать свои работы, а также иметь карусель с подмножеством этих работ. Я хочу иметь объект Carousel, для которого я выбираю изображения.
from django.db import models
from artwork.models import Artwork
# Carousel Model references the artworks in a many to many field
class Carousel(models.Model):
carouseltitle = models.CharField(max_length=200,)
artwork = models.ManyToManyField(Artwork)
class Meta:
verbose_name = 'Carousel'
verbose_name_plural = 'Carousels'
def __str__(self):
return self.carouseltitle
В моем сериализаторе очень просто создает то, что я хочу, за исключением извлечения полей оформления:
from rest_framework import serializers
from .models import Carousel
from artwork.models import Artwork
class CarouselSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Carousel
fields = ('id', 'carouseltitle', 'artwork')
Мое мнение:
from django.shortcuts import render
from .models import Carousel
from .serializers import CarouselSerializer
from rest_framework import generics
# Create your views here.
class CarouselListCreate(generics.ListCreateAPIView):
queryset = Carousel.objects.all()
serializer_class = CarouselSerializer
Создает этот вывод:
[
{
"id": 7,
"carouseltitle": "Home",
"artwork": [
2,
4,
6
]
}
]
Для списка иллюстраций я хочу указать поле из иллюстрации, такое как URL-адрес изображения и заголовок, а не только PK. Для меня все, что я пытаюсь, выдает ошибки. Может ли кто-нибудь направить меня в правильном направлении?
Ответ №1:
Вам нужно создать ModelSerializer для оформления, а затем использовать его в своем CarouselSerializer
:
class ArtworkSerializer(serializers.ModelSerializer):
class Meta:
model = Artwork
fields = artwork_fields_to_show
class CarouselSerializer(serializers.ModelSerializer):
artwork = ArtworkSerializer(many=True)
class Meta:
model = Carousel
fields = ('id', 'carouseltitle', 'artwork')
Вам также не нужно объявлять, что ID является полем только для чтения 🙂
Комментарии:
1. Я знал, что это должно быть просто. Спасибо за простое для понимания объяснение.