Как отправить 'изображение' через POSTMAN? (Django Image Field)

Я хотел бы отправить изображение через postman таким образом и сохранить в каталог 'media', но не знаю, как это сделать.

введите описание изображения здесь

Вот мои коды, которые я использую.

  1. models.py

    class Article(models.Model):
    
         emotion = models.TextField()
         location = models.TextField()
         menu = models.TextField()
         weather = models.TextField()
         song = models.TextField()
         point = models.IntegerField()
         content = models.TextField()
    
         image = models.ImageField(default = 'media/coffee_default.jpg', upload_to = "%Y/%m/%d")
         user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
         created = models.DateTimeField(default = now)
         liked = models.BooleanField(default = False)
         num_liked = models.IntegerField(default = 0)
    
  2. views.py

@api_view(['POST']) @permission_classes([]) def post_articles(request): user = request.user body = json.loads(request.body)

article = Article(
    emotion = body['emotion'],
    location = body['location'],
    menu = body['menu'],
    weather = body['weather'],
    image = body['image'],
    song = body['song'],
    point = body['point'],
    content = body['content'],
    user = user)
article.save()

serializers = ArticleSerializer(article)

return JsonResponse({ "success": True, "data": serializers.data })
  1. serializers.py

    class ArticleSerializer(serializers.ModelSerializer): class Meta: модель = Статья fields = ['emotion', 'location', 'menu', 'weather', 'song', 'point', 'content', 'изображение', 'пользователь', 'создано', 'понравилось', 'num_liked']

Из моего опыта, вам не нужно делать ничего особенного с полями файла, вы просто говорите ему использовать поле файла:

from rest_framework import routers, serializers, viewsets

class Article(django.db.models.Model):
    image = django.db.models.ImageField()
# rest of fields are excluded --TODO

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Article
        fields = ('id', 
                 'image', # <-- HERE
                 'menu', 'weather', 'song', 'point', 'content', 'location', 'emotion')   

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = models.Article.objects.all()
    serializer_class = ArticleSerializer

router = routers.DefaultRouter()
router.register(r'photos', PhotoViewSet)

api_urlpatterns = ([
    url('', include(router.urls)),
], 'api')
urlpatterns += [
    url(r'^api/', include(api_urlpatterns)),
]

и вы готовы к загрузке файлов:

curl -sS http://example.com/api/photos/ -F 'image=@/path/to/file' Добавьте -F field=value для каждого дополнительного поля, которое есть в вашей модели. И не забудьте добавить аутентификацию.

или с dothttp

POST http://example.com/api/articles/ 
multipart(
    'image'< '<file to the path>',
    'emotion' < "emotion",
    'location' < "location",
    'menu' < "menu",
    'weather' < "weather",
    'image' < "image",
    'song' < "song",
    'point' < "point",
    'content' < "content"
)
Вернуться на верх