我有test.py


from rest_framework.test import APITestCase
from django.core.files.uploadedfile import SimpleUploadedFile
from django.urls import reverse

class PostImageTest(APITestCase):
    def setUp(self) -> None:
        self.product = Product.objects.create(...)
        self.sampleImage = SimpleUploadedFile("test_image.jpg", b"binary data", content_type="image/jpeg")

    def test_with_valid_data(self) -> None:
        data = { "image":self.sampleImage, "is_featured":true }
        response = client.post(reverse('images'), data, format='multipart')

我想将像100这样的查询参数传递给client.post()方法.另外,我不知道如何对图像进行编码并发送POST请求.

当我试着这样做的时候

response = client.post(reverse('images'), {'product' : self.product.id}, data=data, format='multipart')

它给了我这个错误

TypeError: Client.post() got multiple values for argument 'data'

推荐答案

就这样解决了

from io import BytesIO
from PIL import Image as img

def get_url(self, paramKey=None, paramValue=None):
    url = reverse('images') + f"?{paramKey}={paramValue}"
    return url

def create_valid_image(self):
    image_file = BytesIO()
    image = img.new('RGBA', size=(50, 50), color=(155, 0, 0))
    image.save(image_file, 'png')
    image_file.name = 'test_image.png'
    image_file.seek(0)
    return image_file

def test_with_valid_data(self) -> None:
    self.myImage = self.create_valid_image()
    expectedStatusCode = status.HTTP_201_CREATED

    url = self.get_url('product', self.product.id)
    data = { 'image' : self.myImage, 'is_featured' : True }
    response = client.post(url, data)
    receivedStatusCode = response.status_code

    self.assertEqual(receivedStatusCode, expectedStatusCode)

因此,看起来如果我们在client.post()中传递Query_Params,它会将其视为请求数据.因此,我们必须将查询参数连接到原始的url.

可以进一步通过这document

Django相关问答推荐

为什么当对字段使用自定义序列化器时,Django Rest框架中Inbox字段会消失?

如何根据属性的 Select 对查询集进行排序

Django-将html数据保存到quillfield中

无法迁移,模型中的外键导致了问题

为什么 Django 在错误的目录中寻找模板?

如何将数据(具体归档)从views.py 传递到models.py

在 Django 模板中呈现标签名称而不是整数字段

使用django提交后如何保留html表单数据?

Django 如何知道我的数据库的路径?

相同的字符串不同的翻译

Django 嵌套事务 - with transaction.atomic()

关于Django中批量保存对象的问题

如何运行克隆的 Django 元素?

无法通过 pip 安装 Django 2.0

如何在 django 模板中将名称反转为绝对 url?

Django中视图的多个decorator :执行顺序

使用 Django 1.5 实现多种用户类型

django post_save 更新信号

更改 Django ModelChoiceField 以显示用户的全名而不是用户名

Django 自定义用户邮箱帐户验证