如何测试Django Form ImageField

时间:2017-10-09 07:41:09

标签: python django

我想测试我的imageform,我提供所有必需的数据,但它仍然给我一个错误。有谁知道,如何测试表单的ImageField?

我的模特是

class Image(CustomModel):

    path = models.ImageField(_('Path'), upload_to=get_file_path,
                             help_text=_('Represents a path of an image.'))

    caption = models.CharField(_('Caption'), max_length=128,
                               null=False, blank=False,
                               db_column='caption',
                               help_text=_('128 characters max.')

    meta_info = models.TextField(_("Image MetaInfo"), null=False, blank=False,
                                help_text=_('Image meta info'),
                                default='{}', db_column='meta_info')

    created_at = models.DateTimeField(_('Created At'), null=False,
                                      db_column='created_at', blank=False,
                                      help_text=_('Date time at which image was created.'),
                                      default=datetime.now())

我的表格:

class ImageForm(forms.ModelForm):
    class Meta:
            """
            Meta class for Image form
            """
            model = Image
            fields = ('caption', 'path', 'status','meta_info')
            widgets = {
                'meta_info': forms.HiddenInput(),
            }

class ImageForm(forms.ModelForm):

我的测试方法:

def test_form_valid(self):
            """
            """
            self.tmp_dir = tempfile.mkdtemp()
            path = os.path.join(self.tmp_dir,"a376140b-054f-4329-82e1-f271af5cfcaf.png")
            form = ImageForm({'caption':'image', 'path':path, 'status':'A', "created_at":timezone.now(),
                             'meta_info':"{\"id\":2,\"type\":\"Q\",\"lang_id\":1}"})
            print(form.is_valid())
            print(form.errors)
            assert form.is_valid(), 'should be valid'

回溯:

   def test_form_valid(self):
        """
            """
        self.tmp_dir = tempfile.mkdtemp()
        path = os.path.join(self.tmp_dir,"a376140b-054f-4329-82e1-f271af5cfcaf.png")
        form = ImageForm({'caption':'image', 'path':path, 'status':'A', "created_at":timezone.now(),
                         'meta_info':"{\"id\":2,\"type\":\"Q\",\"lang_id\":1}"})
        print(form.is_valid())
        print(form.errors)
>       assert form.is_valid(), 'should be valid'
E       AssertionError: should be valid
E       assert False
E        +  where False = <bound method BaseForm.is_valid of <ImageForm bound=True, valid=False, fields=(caption;path;status;meta_info)>>()
E        +    where <bound method BaseForm.is_valid of <ImageForm bound=True, valid=False, fields=(caption;path;status;meta_info)>> = <ImageForm bound=True, valid=False, fields=(caption;path;status;meta_info)>.is_valid

droana/apps/test_manager/test/test_views.py:269: AssertionError
---------------------------- Captured stdout setup -----------------------------
Installed 1320 object(s) from 1 fixture(s)
----------------------------- Captured stdout call -----------------------------
False
<ul class="errorlist"><li>path<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
__

我尝试过测试imagefield的解决方案,但这对我不起作用。 有谁知道如何测试imagefield?

1 个答案:

答案 0 :(得分:1)

应该是:

from django.core.files.uploadedfile import SimpleUploadedFile
....
data = {'caption':'image', 'status':'A', "created_at":timezone.now(), 'meta_info':"{\"id\":2,\"type\":\"Q\",\"lang_id\":1}"}
form = ImageForm(data, {'path':SimpleUploadedFile('filename.png', 'data')})

因此,当您尝试使用表单绑定文件数据时,应始终将文件信息放入UploadedFile对象中,并使用两个参数构建表单。

here是Django Doc

的例子