Как загрузить несколько изображений? django-rest-framework
Необходимо реализовать загрузку нескольких изображений, но выбрать несколько не получается (когда зажимаю ctrl). Как это исправить?
models.py
class Post(models.Model):
objects = ImageQuerySet.as_manager()
author = models.ForeignKey(User,
null=True,
on_delete=models.CASCADE,
verbose_name='Пользователь')
image = models.ImageField(upload_to='images/', verbose_name='Изображение')
view_count = models.IntegerField(default=0, verbose_name='Кол-во просмотров')
tag = models.CharField(max_length=30, choices=TAG_CHOICES, blank=True, verbose_name='Тэг')
api.py
class PostModelView(viewsets.ModelViewSet):
"""Просмотр/Создание/Редактирование/Удаление поста"""
parser_classes = (MultiPartParser, FormParser,)
permission_classes = [permissions.IsAuthenticated]
queryset = Post.objects.all()
serializer_class = PostsListSerializer
permission_classes_by_action = {'update': [permissions.IsAdminUser],
'destroy': [IsAuthorEntry]}
def perform_create(self, serializer):
serializer.save(author=self.request.user)
for item in self.request.FILES.getlist('image'):
Post.objects.create(image=item, author=self.request.user, tag=self.request.tag)
serializers.py
class PostsListSerializer(serializers.ModelSerializer):
"""Список постов"""
class Meta:
model = Post
fields = '__all__'
image = serializers.ListField(child=serializers.ImageField(required=True))
Ответы (1 шт):
Автор решения: Vladimir Babaev
→ Ссылка
Используй промежуточную таблицу, по типу
class ImagePost(models.Model):
image = models.ImageField(upload_to='images/', verbose_name='Изображение')
class Post(models.Model):
objects = ImageQuerySet.as_manager()
author = models.ForeignKey(User,
null=True,
on_delete=models.CASCADE,
verbose_name='Пользователь')
images = models.ManyToManyField(ImagePost)
view_count = models.IntegerField(default=0, verbose_name='Кол-во просмотров')
tag = models.CharField(max_length=30, choices=TAG_CHOICES, blank=True, verbose_name='Тэг')
Тогда уже создаешь сеаризатор для создания изображения и в модель Post через сериализатор создания поста вносишь id изображений, в методе create сериализатора вносишь через
post=Post.objects.create(...) post.images.set(id) либо post.images.add(id)
Тут почитай про отношения сериализаторов