EpisodeImage связан с внешним ключом для модели Episode.Итак, в Episode есть загрузка нескольких изображений.Но я запутался, как все это объединить в API.Согласно этому коду все в эпизодах работает нормально, но пользователь должен иметь возможность добавлять несколько изображений в эпизоде, поэтому я думаю, как это сделать, переопределив методы.Также должно быть два сериализатора, но я не думаю, как именно это сделать.Создание другой конечной точки - плохая идея, потому что во время создания эпизода пользователь также будет добавлять изображения.
models.py
class Episode(models.Model):
...
story = models.ForeignKey(Story, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
episode_number = models.IntegerField(null=True)
class EpisodeImage(models.Model):
episode = models.ForeignKey(Episode, related_name='images', on_delete=models.CASCADE)
image = models.ImageField(upload_to=upload_location)
admin.py
class EpisodeImageInline(admin.TabularInline):
model = EpisodeImage
extra = 3
class EpisodeAdmin(admin.ModelAdmin):
inlines = [EpisodeImageInline]
admin.site.register(Episode, EpisodeAdmin)
serializers.py
class EpisodeSerializer(serializers.ModelSerializer):
story = serializers.IntegerField(source='story.id', read_only=True)
class Meta:
model = Episode
fields = '__all__'
class EpisodeImageSerializer(serializers.ModelSerializer):
episode = EpisodeSerializer(read_only=True)
class Meta:
model = EpisodeImage
fields = '__all__'
views.py
class EpisodeView(viewsets.ModelViewSet):
serializer_class = EpisodeSerializer
def get_queryset(self):
story_id = self.kwargs['story_id']
return Episode.objects.filter(story=story_id)
def perform_create(self, serializer):
return serializer.save(story=story)
def perform_update(self, serializer):
return super(EpisodeView, self).perform_update(serializer)
def perform_destroy(self, instance):
return super(EpisodeView, self).perform_destroy(instance)