Django - как Вы превращаете InMemoryUploadedFile в FieldFile ImageField?

Вот рабочий пример. Delivery Droid Database Class

.

11
задан vishes_shell 2 March 2016 в 23:13
поделиться

3 ответа

Вы пытающийся сделать это в ModelForm?

Это - то, как я сделал для поля файла

class UploadSongForm(forms.ModelForm):
    class Meta:
        model = Mp3File

    def save(self):
        content_type = self.cleaned_data['file'].content_type
        filename = gen_md5() + ".mp3"
        self.cleaned_data['file'] = SimpleUploadedFile(filename, self.cleaned_data['file'].read(), content_type)
        return super(UploadSongForm, self).save()

Можно взять его в качестве примера и взгляда в источнике, в чем класс InMemoryUploadedFile нуждается в параметрах инициализации.

3
ответ дан 3 December 2019 в 05:14
поделиться

Вы могли реализовать форму с полем загрузки файла при помощи экземпляров формы, вот представление:

def form_view(request):
    if request.method == 'POST':
        form = FooForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return render_to_response('result.html')
        return render_to_response('form.html', {
            'form': form;
            'error_messages': form.errors;
        }
    form = FooForm()
    return render_to_response('form.html', {
        'form': form;
    }

form.save () сохранил загруженный файл наряду со всеми другими полями, когда Вы включали запрос. Аргумент ФАЙЛОВ в он - конструктор. В Ваших моделях необходимо определить подкласс FooForm класса ModelForm как это:

class FooForm(ModleForm):
    Meta:
        model = Foo

... где Foo является подклассом Модели, которая описывает данные, Вы хотите сохранить постоянно.

1
ответ дан 3 December 2019 в 05:14
поделиться

Вам нужно сохранить InMemoryUploadedFile в ImageField, а не "превращать" его в ImageField:

image = request.FILES['img']
foo.imagefield.save(image.name, image)

где foo - экземпляр модели, а imagefield - ImageField.

В качестве альтернативы, если вы извлекаете изображение из формы:

image = form.cleaned_data.get('img')
foo.imagefield.save(image.name, image)
18
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: