0

特定の種類のファイルのアップロードを許可したい。特定のファイルに対して以下のコードを書きましたが、うまくいきました。

def validate_file_extension(value):
    if not value.name.endswith('.zip'):
       raise ValidationError(u'Error message')

しかし、複数のファイルを許可したいので、それらのファイルをsettings_devに設定し、以下のコードを書きましたが、機能しません。

def validate_file_extension(value):
    for f in settings_dev.TASK_UPLOAD_FILE_TYPES:
        if not value.name.endswith(f):
           raise ValidationError(u'Error message')

設定_開発

TASK_UPLOAD_FILE_TYPES=['.pdf','.zip','.docx']

モデル:

up_stuff=models.FileField(upload_to="sellings",validators=[validate_file_extension])

これについてどうすればいいですか?

4

1 に答える 1

1

に複数の (異なる) ファイル タイプがあるTASK_UPLOAD_FILE_TYPES場合、forループは常に例外を発生させます。いずれかのファイル タイプが一致しないためです。

タプルを引数として受け入れるforため、使用する必要はありません。str.endswith

>>> 'data.docx'.endswith(('.pdf','.zip','.docx'))
True
>>> 'data.py'.endswith(('.pdf','.zip','.docx'))
False

def validate_file_extension(value):
    if not value.name.endswith(tuple(settings_dev.TASK_UPLOAD_FILE_TYPES)):
       raise ValidationError(u'Error message')
于 2013-10-10T09:29:14.020 に答える