Загрузка нескольких изображений в django остальные рамки / реагировать - PullRequest
0 голосов
/ 03 февраля 2020

Попытка сделать довольно простой проект, где я могу загрузить несколько изображений на свой сервер с помощью всего лишь нескольких других полей. Я пытался подписаться на этот пост , но не смог ничего найти. Я знаю, что мне нужно разбить мои модели на две части с помощью PostImage, имеющего ForeignKey, который относится к Post. И я знаю, что мне нужно будет изменить сериализатор, чтобы разрешить массив файлов изображений. Любая помощь будет принята с благодарностью.

models.py:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length = 100)
    content = models.TextField()
    image = models.ImageField(upload_to='post_images')

    def __str__(self):
        return self.title

serializers.py:

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

views.py:

from django.shortcuts import render

# Create your views here.

from .serializers import PostSerializer
from .models import Post
from rest_framework.views import APIView
from rest_framework.parsers import MultiPartParser, FormParser
from rest_framework.response import Response
from rest_framework import status
# Create your views here.

class PostView(APIView):
    parser_classes = (MultiPartParser, FormParser)

    def get(self, request, *args, **kwargs):
        posts = Post.objects.all()
        serializer = PostSerializer(posts, many=True)
        return Response(serializer.data)

    def post(self, request, *args, **kwargs):
        posts_serializer = PostSerializer(data=request.data)
        if posts_serializer.is_valid():
            posts_serializer.save()
            return Response(posts_serializer.data, status=status.HTTP_201_CREATED)
        else:
            print('error', posts_serializer.errors)
            return Response(posts_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

1 Ответ

0 голосов
/ 03 февраля 2020

Вам необходимо иметь отношение ForeignKey с моделью Post. Вы можете сделать так:

models.py

from django.db import models

class Media(models.Model):
    detail = models.CharField(max_length=200, default='', null=True, blank=True)
    user = models.ForeignKey(to=MyUser, related_name='user_media')
    type = models.CharField(max_length=20, choices=Constant.model.MEDIA_TYPE, default='other')
    media = models.FileField(max_length=10000, upload_to=upload_media_file, blank=True, null=True)

class Post(models.Model):
    title = models.CharField(max_length = 100)
    content = models.TextField()
    media = models.ForeignKey(Media, related_name='posts')

    def __str__(self):
        return self.title

serializer.py

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    media = serializers.ListField(write_only=True,
                                  child=serializers.FileField(max_length=10000000,
                                                              allow_empty_file=True,
                                                              use_url=False)
    class Meta:
        model = Post
        fields = '__all__' 

    def is_valid(self, raise_exception=False):
            if len(data.getlist('media')) > 5:
                 raise 'some error'
...