У меня есть модель для статей, которая принимает поле FileField
, которое должно быть файлом уценки, чтобы пользователь уже мог загрузить свою статью. Я выставляю API с ModelViewSet
.
Это сохраняется в моей папке мультимедиа. Я мог бы получить контент со стороны клиента, ПОЛУЧАЯ его из href
, конечно, но это означало бы 2 запроса к моему серверу:
- получить информацию о статье (название, контент - это md , дата публикации, описание и др. c ..).
- получить контент по ссылке.
Но мне интересно, есть ли способ сказать django просто отправьте содержимое файла вместо href
, когда он ответит на запрос элемента статьи.
Вот моя модель и API:
# ---------------------- #
# src/articles/models.py #
# ---------------------- #
from os.path import splitext
from uuid import uuid4
from django.db import models
# Create your models here.
def hashFilename(instance, name):
ext = splitext(name)[1]
return "articles/{}{}".format(uuid4(), ext)
def hashImageFilename(instance, name):
ext = splitext(name)[1]
return "images/{}{}".format(uuid4(), ext)
class Article(models.Model):
title = models.CharField(("title"), max_length=100)
content = models.FileField("content", upload_to=hashFilename)
description = models.TextField(("description"), default='')
uploadDate = models.DateTimeField(("uploadDate"), auto_now=True)
lastModified = models.DateTimeField(("uploadDate"), auto_now=True)
publicationDate = models.DateField("publicationDate")
image = models.ImageField("image", upload_to=hashImageFilename)
def __str__(self):
return self.title
# ------------------------- #
# src/articles/api/views.py #
# ------------------------- #
from rest_framework.viewsets import ModelViewSet
from ..models import Article
from .serializers import ArticleSerializerFull, ArticleSerializerShort
class ArticlesViewSet(ModelViewSet):
queryset = Article.objects.all()
def get_serializer_class(self):
if self.action == 'list':
serializer = ArticleSerializerShort
else:
serializer = ArticleSerializerFull
return serializer
queryset = Article.objects.all()