【问题标题】:django restframework how to edit POST formdjango rest framework 如何编辑 POST 表单
【发布时间】:2022-11-25 02:59:46
【问题描述】:

我正在研究调整图像大小的 api。我只想上传一个文件,将其保存并调整大小并将其保存在另一个文件夹中。

模型.py

from django.db import models
from django.conf import settings
from django_resized import ResizedImageField
from django.contrib.auth import get_user_model

User = get_user_model()


class Image(models.Model):
    file = models.ImageField(upload_to="files/")
    file1 = models.ImageField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def save(self, *args, **kwargs):
        if self.file:
            self.file1 = ResizedImageField(self.file, size=[200, 200])
        super(Image, self).save(*args, **kwargs)

视图.py

from rest_framework import generics
from .models import Image
from .serializers import ImageSerializer


class ListCreateImage(generics.ListCreateAPIView):
    serializer_class = ImageSerializer

    def get_queryset(self):
        queryset = Image.objects.filter(author=self.request.user)
        return queryset

    def perform_create(self, serializer):
        kwargs = {"author": self.request.user}

        serializer.save(**kwargs)


class DetailImage(generics.RetrieveAPIView):
    serializer_class = ImageSerializer

    def get_queryset(self):
        queryset = Image.objects.filter(author=self.request.user)
        return queryset

序列化程序.py

from rest_framework import serializers
from .models import Image


class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Image
        fields = ("file", "file1")
        read_only_fields = (
            "id",
            "author",
        )

问题是我的代码有效,但 HTML 表单要求我提供 2 个文件,我想只使用一个文件获得相同的结果。

所以输出应该是这样的:

{
        "file": "http://127.0.0.1:8000/files/register_og.png",
        "file1": "http://127.0.0.1:8000/files/thumb200px/register_og.jpg"
    },

【问题讨论】:

  • 添加 file1 到 read_only_fields 如果它应该是只读的

标签: python django django-rest-framework


【解决方案1】:

ImageSerializer 的 Meta 类中有一个 fields 属性。它应该只包含您要上传的文件。

fields ("file")

不是

fields ("file", "file1")

在评论中表达你的意图我建议你也将 "file1" 添加到只读字段

read_only_fields = (
            "id",
            "author",
            "file1",
        )

【讨论】:

  • 它还从 JSON 中删除 file1,我的目的是在 JSON 中包含 file1,但不在输入中
猜你喜欢
  • 2022-08-07
  • 2016-12-22
  • 1970-01-01
  • 2015-05-12
  • 2018-09-22
  • 2016-12-26
  • 2016-12-29
  • 1970-01-01
  • 2014-09-14
相关资源
最近更新 更多