Загрузка многих файлов в форме ImageField - django - PullRequest
4 голосов
/ 22 августа 2009

Моя проблема проста. У меня есть такой шаблон:

<form enctype="multipart/form-data"
action="{% url offers.views.add_offer %}" method="post">    
    <input type="file" name="image1" />
    <input type="file" name="image2" />     
    <input type="submit" value="Add" />
</form>

Модель выглядит так:

class Image(models.Model):
    image = models.ImageField(upload_to='uploads/images/offers/')

И такие формы (использует образ модели):

class ImageForm(ModelForm):
    class Meta:
        model = Image

И вот так:

    for f in request.FILES:
    # imageform:
        image = ImageForm(request.POST, f)
        image.save()

Проблема в том, что я не могу загрузить изображения. Я хочу сохранить изображение в двух отдельных экземплярах модели изображения.
У меня ошибка:

У объекта 'Unicode' нет атрибута 'get'

Спасибо за любую помощь и ответ.

Обновлено для предоставления дополнительной информации

Ответы [ 3 ]

8 голосов
/ 23 августа 2009

Человек, Django Formsets - это то, что вам нужно:

http://docs.djangoproject.com/en/dev/topics/forms/formsets/

Отредактировано

Вид:

def manage_images(request):
    ImageFormSet = formset_factory(ImageForm)
    if request.method == 'POST':
        formset = ImageFormSet(request.POST, request.FILES)
        if formset.is_valid():
            # do something with the formset.cleaned_data
    else:
        formset = ImageFormSet()
    return render_to_response('manage_images.html', {'formset': formset})

Шаблон:

<form enctype="multipart/form-data" action="{% url offers.views.add_offer %}" method="post">
    {{ formset.management_form }}
    <table>
        {% for form in formset.forms %}
        {{ form }}
        {% endfor %}
    </table>
</form>
2 голосов
/ 23 августа 2009

здесь вы найдете документы для загрузки файла .

Я сохраняю свое изображение в форме save () - метод такой:

def save(self): 
    if self.cleaned_data.get('galleryname'):
        if self.cleaned_data.get('images1'):

            path = 'images/'+ urlify(self.cleaned_data.get('galleryname'))+self.cleaned_data.get('images1').name
            destination = open(s.MEDIA_ROOT+path, 'wb+')
            for chunk in self.cleaned_data.get('images1').chunks():
                destination.write(chunk)
            p = Photo()
            p.picture="./"+path
            p.save()

и в представлении у меня есть

form = CompleteSubscriptionForm(request.POST, request.FILES, error_class=DivErrorList)
if form.is_valid(): # All validation rules pass
        form.save()
1 голос
/ 22 августа 2009

Что заставляет вас думать, что это сработает? Вы перебираете request.FILES и пытаетесь создать экземпляр формы на каждой итерации, передающей объект файла. Это не похоже на то, что написано в документации, в которой говорится, что вы должны передать все request.FILES in.

Отредактировано после комментария Слушайте, вы не дали нам много информации, чтобы продолжить. У вашей модели есть одно изображение или два? Почему вы пытаетесь обрабатывать два изображения отдельно? Вы пытаетесь создать два отдельных экземпляра модели или один с двумя изображениями? Что именно вы пытаетесь сделать?

В основном вы просто хотите сделать это:

form = ImageForm(request.POST, request.FILES)
if form.is_valid():
    form.save()

и все.

...