Jump to content
  • 0

python&django: Повторная отправка формы с файлом


cyklop77
 Share

Question

помогите пожалуйста решить проблему в django1.6, python3.3


я сделал форму, в которой пользователь выбирает файл и после отправки выбранный файл(его адрес) загружается в БД. всё работает, но при повторной загрузке формы(если пользователь не трогал в форме поле файла) и отправке формы в адрес файла из БД пропадает(перезаписывается пустым значением). можно ли этого избежать?


views.py:



@login_required
def path_glory_edit_item(request, id):
if request.method == 'POST':
form = PathGloryForm(request.POST, request.FILES)
if form.is_valid():
entry = PathGlory.objects.get(id=id)
entry.title = form.cleaned_data.get('title').strip()
entry.place = form.cleaned_data.get('place').strip()
entry.date = form.cleaned_data.get('date')
entry.teaser = form.cleaned_data.get('teaser').strip()
entry.text = form.cleaned_data.get('text').strip()
entry.path_glory_photo = form.cleaned_data.get('path_glory_photo')
entry.save()

return HttpResponseRedirect('/userprofile/path_glory_edit_item_changed/')
else:
entry = PathGlory.get_entry(id=id)
arg = {
'user_id': request.user.pk,
'title': entry.title,
'date': entry.date,
'place': entry.place,
'teaser': entry.teaser,
'text': entry.text,
'path_glory_photo': entry.path_glory_photo,
}

form = PathGloryForm(arg)

t = loader.get_template('path_glory_edit_item.html')
c = RequestContext(request, {
'form': form,
'id': id,
'path_glory_photo': arg['path_glory_photo'],
}, [custom_proc])
return HttpResponse(t.render(c)) 

фрагмент шаблона:



<p class="cell">
{% if path_glory_photo %}
{% thumbnail path_glory_photo "60x60" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
{% endif %}

<!--<label class="label">{{ form.path_glory_photo.label }}</label>-->

{{ form.path_glory_photo }}

{{ form.path_glory_photo.errors }}
</p>

<input type="submit" value="send" />
</form>

Edited by cyklop77
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

А почему так всё уныло? Почему не ModelForm? Можно было бы просто сделать form.save() и всё.

P.S. Ну и у ModelForm есть в ините аргумент instance, куда можно передавать нужный вам объект — не придётся такой трэш городить.

  • Like 1
Link to comment
Share on other sites

  • 0

Ещё пару советов на будущее.

1. Если объекта с таким id не будет, то получится 500 ошибка. Лучше использовать get_object_or_404 из django.shortcuts.

2. Вывод шаблона тоже странный — не проще ли использовать render оттуда же?

3. Делать редирект на прямой урл — не самая хорошая идея. Испоьзуйте лучше reverse из django.core.urlresolvers

  • Like 1
Link to comment
Share on other sites

  • 0

Ещё пару советов на будущее.

1. Если объекта с таким id не будет, то получится 500 ошибка. Лучше использовать get_object_or_404 из django.shortcuts.

2. Вывод шаблона тоже странный — не проще ли использовать render оттуда же?

3. Делать редирект на прямой урл — не самая хорошая идея. Испоьзуйте лучше reverse из django.core.urlresolvers

а в render разве можно передать 

, [custom_proc]

? я только из-за этого использую такой способ

Edited by cyklop77
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By kuzia007
      Пример сайта по разработке reactiq точка net 
      Цена на разработку 70 000 рублей. Без дизайна и верстки, от вас нам нужен функционал 
      на фреймворке Lavarel 
      Нужно постараться уложиться в 20 дней по срокам. 
      Работа по Сделке без риска. B и больше ни как. 

      Основные моменты работы сайта: 
      авторизация сайта через стим 
      считывания апи через официальный сайт pubg 
      Трейдов скинов и все остальное не будет! 
      подключить систему оплат 
      создание личного кабинета для пользователя. 
      Есть полное ТЗ проекта, которое мы готовы упрощать на первом этапе.
      Готовы достойно оплачивать ваш труд! 
      Пишите в телеграм @evgensalyah
    • By kuzia007
      Ищем талантливого программиста в игровой проект
      Для разработки игрового проекта требуются талантливые программисты.
      Отличное знание: PHP, JavaScript, Python
      Преимуществом будет если когда-то работали с платформой steam и с голосовым мессенджером Discord.

      Вкратце о проекте: Будет разрабатываться площадка для проведения турниров по играм pubg, dota, cs go.
      Ищем программиста с руками. Не важно какой вы ориентации, вероисповедания и т.д. Нам от вас важен результат!
      Готовы достойно оплачивать ваш труд! 
      Пишите в телеграм @evgensalyah
    • By Кирилл Марченко
      Предлагаю услуги Агентства по развитию бизнеса “НеКидаем.ру”
      Наша компания занимается:
      - Оптимизацией загрузки сайта
      - Созданием Landing Page (посадочной страницы)
      - Аудитом маркетинговой кампании
      - Юзабилити аудит сайта
      - Переводом сайта к адаптивному виду
      - Переводом сайтов на HTTPS
      - Созданием сайтов
      - Продвижением сайта в поисковых системах (SEO)
      - Продвижением в социальных сетях
      - Контекстной рекламой

      Из последних наших проектов:
      биржа рекламы на частных автомобилях;
      биржу спроса, где можно заказывать услуги и товары по собственным ценам;
      агрегатор по грузоперевозкам;
      биржа рекламы в социальных сетях;
      интернет-магазин искусственных цветов;
      интернет-магазин овощей и  фруктов;

      По запросу, готовы предоставить портфолио выполненных проектов.

      Основные технологии, при помощи которых ведется разработка: Django•Python•PostgreSQL•Backbone.js•Ubuntu•Celery •Redis•Rabbitmq•Javascript

      Ждем Ваших откликов на эл. почту info@alfacvet.ru
    • By Кирилл Марченко
      В агентство по развитию бизнеса NeKidaem.ru требуется ответственный и грамотный сотрудник на должность back-end разработчика Python / Django.
      Мы гарантируем крутой воркфлоу, помощь в освоении нового и интересные задачи.
       
      Ты будешь принимать непосредственное участие в разработке проектов уровня сложности:
      jata.ru  - реклама на частных автомобилях;
      cupidus.ru - заказ услуг и товаров по собственным ценам;
      groozgo. ru - агрегатор по грузоперевозкам;
      optostack.ru - оптосток - твой главный инструмент по работе с Avito
       
      Ты будешь работать под управлением разработчика, принимавшего непосредственное и самое активное участие в разработке sociate.ru
       
      У нас есть задачи под любой уровень разработки, а потому если ты:
      junior-разработчик, то пиши нам, мы прокачаем твои навыки под руководством опытного наставника!
      middle-разработчик, тебе гарантированы сложные, интересные задачи, с огромным полем профессионального роста.
      для pro-разработчиков у нас так же есть нетривиальные проекты. Непростые, где понадобиться весь твой опыт и очень интересные. Пиши!
       
      Обязанности:
      - Проектирование и разработка на Python нового функционала;
      - Рефакторинг, унификация и поддержание в работоспособном состоянии имеющейся кодовой базы;
      - Работа в команде, активная работа над интересными и сложными проектами.
       
      Требования:
      - Здоровая инициатива.
      - Ответственность, внимательность, умение признавать свои косяки и их исправлять.
      - Уверенное знание: Django, Django-Rest-Framework, PostgreSQL, Celery;
      - Опыт написания и поддержки тестов (unittest, mock);
      - Владение Linux (Debian / Ubuntu) на уровне уверенного пользователя;
      - Понимание основ Nginx-конфигурирования;
      - Быть на связи в рабочее время;
      - Вести отчет по своим задачам в Trello.
       
      Будет плюсом:
      - Опыт работы по Scrum-методологии, а также применения Continuous Integration (Jenkins, TeamCity);
      - Опыт работы с Ansible, Fabric;
      - Опыт командной работы с Git.
       
      Условия:
      - Обсуждаемый рабочий график.
      На начальный период приемлема частичная занятость, далее полная, т.к. проектов и клиентов у нас всегда очень много.
      - Без проблем удаленная работа.
      - Работа в дружном и технически грамотном коллективе. Владельцы агенства NeKidaem.ru являются менторами и экспертами технопарка и бизнес-инкубатора Ингрия.
       
      Оплата:
      Оклад определяется твоими начальными навыками и определяется после выполнения тестового задания и периодически пересматривается на предмет повышения в зависимости от твоих успехов.
       
      Хочешь занять вакансию разработчика? Тогда сделай 4 простых шага:
       
      1. Резюме отправлять по адресу info@nekidaem.ru с заголовком «Вакансия back-end разработчика Python».
      В отклике на вакансию обязательно должны быть обозначены твои пожелания по оплате и количество рабочих часов в неделю, которые ты сможешь уделять полноценной разработке.
      2. В ответ на твое письмо будет выслано тестовое задание.
      3. Будет весомым плюсом, если к резюме ты приложишь рассказ о себе в свободной форме, логин в скайпе/номер телефона, ссылки на твои профили в вк/фб и гитхабе.
      4. Общаемся лично в скайпе и обсуждаем условия нашего сотрудничества.
    • By twentyfive_agency
      Мы достаточная слаженная команда и работаем как единый механизм.
      Все члены команды обладают достаточной компетенцией, чтобы выполнять работы разного уровня сложности.
      Сейчас у нас в команде:
      4 Технолога/Верстальщика (html5, css3, javascript, reat, angular) 2 Проектировщика/Дизайнера (invision, photoshop, illustrator, sketch) 3 Бэкенд разработчика (php, nodejs, python + работа со всеми известными cms,crm-системами) 4 Мобильных разработчика (1 iOs, 1 Android) 2 Тестировщика Каждый из членов команды четко понимает ответственность за проект!
      Все задачи ведем в Basecamp, Trello и JIRA, и всегда добавляем туда заказчика, чтобы формировалась прозрачность работы.
      Процесс работы по проектам у нас такой:
      Получаем задание Оцениваем сроки и стоимость, предоставляем информацию в электронном виде заказчику. Согласуем эти данные или вносим корректировки. Подписываем договор (с нашей стороны ИП) Получаем аванс по договору Начинаем работу по проекту Ведем разработку проекта Показываем финальную итерацию заказчику и запускаем проект в продакшн. Остаемся довольными сотрудничеством и получаем отзывы по работе, слаженности и о качестве проекта в целом. Рейты работы наших специалистов:
      Проектирование/Дизайн // 700-800 руб/час Верстка/js  // 700-800 руб/час Программирование (бэкенд) // 700-1000 руб/час Тестирование // 400-650 руб/час Разработка приложений (iOS, Android) // 1000-1400 руб/час Мы работаем над тем, чтобы:
      Заказчик всегда был уверен в том, что сроки по проекту не выйдут за согласованные. Заказчик был уверен в том, что качество работ будет проведено на высшем уровне. Заказчик похвалил нас и сказал, что вернется еще или останется с нами на техподдержку. Наши работы:
      http://greenjam.ru http://tuborg.ru http://k1664.ru http://corny.ru http://megalabs.ru http://prostude.net http://ecorse.education http://eqeducation.org http://dadacreative.com http://tfg.ru/ http://pirelli.autonews.ru/ http://id-direct.ru http://localway.ru  
       
      Twenty Five Agency
      twentyfive.agency
      Georgy Pantsulaya, CEO
      via phone: +7-989-536-00-35
      via skype: hello@twentyfive.agency
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy