Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Django] Ошибка при добавлении записи в модель. 
:(
    Опции темы
Kotakota
  Дата 17.6.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Столкнулся с такой задачей.
Необходимо сделать валидацию формы и выполнить запись в модель на основании данных введенных в HTML форме.

views.py

Код

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from RandomQuote.upload.forms import UploadFileForm
from RandomQuote.settings import MEDIA_ROOT

def handle_uploaded_file(f):
    destination = open(MEDIA_ROOT+'/images/'+f.name, 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()

def startUpload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['firstfile'])
            form.save()
            return HttpResponseRedirect('/')


forms.py

Код

from django import forms
class UploadFileForm(forms.Form):
      author = forms.CharField(required=True)
      title = forms.CharField(required=True)
      describe = forms.Textarea()
      tags = forms.SelectMultiple()
      firstfile  = forms.ImageField()

      def save(self):
          author = self.cleaned_data["author"]
          title = self.cleaned_data["title"]
          describe = self.cleaned_data["describe"]
          tags = self.cleaned_data["tags"]
          from RandomQuote.quotes.models import Tag, Image
          Image(image_author=author,
                image_title=title,
                image_description=describe,
                image_tags=tags
                ).save()



HTML шаблон:

Код

<form enctype="multipart/form-data" action="upload/" method="post">
    {% csrf_token %}

<TABLE cellpadding="0" cellspacing="0" border="0">
<TR><TD><label for="id_author">Автор:</label></TD><TD><input type="text" size=20 name="author" id="id_author" value="{{ user.username }}" /></TD></TR>
<TR><TD><label for="id_title">Название:</label></TD><TD><input type="text" size=20 name="title" id="id_title" /></TD></TR>
<TR><TD><label for="id_describe">Описание:</label></TD><TD><textarea rows="10" cols="20" name="describe" id="id_describe"></textarea>  </TD></TR>
<TR><TD>Дата: </TD><TD>{% now "jS F Y H:i" %}</TD></TR>
<TR><TD><label for="id_tags">Выберите теги:</label></TD><TD>

<select multiple="multiple" name="tags" id="id_tags">

{% if tags %}
    {% for tag in tags.all %}
        <option>{{ tag }}</option>
    {% endfor %}
{% endif %}

</select>

</TD></TR>
<TR><TD><label for="id_firstfile">Файл:</label></TD><TD><input type="file" size=20 name="firstfile"
                                                              id="id_firstfile" /></TD></TR>
<TR><TD colspan="2" align="right"> <input type="submit" value="Загрузить!" /></TD></TR>
</TABLE>
</form>



И в дополнение модель из приложения quotes куда это все должно записываться.

Код

from django.db import models
from django.contrib.auth.models import User

class Tag(models.Model):
    tag_name = models.CharField(max_length=30)
    def __unicode__(self):
        return self.tag_name

class Image(models.Model):
    image_author = models.ForeignKey(User)
    image_title = models.CharField(max_length=30)
    image_description = models.TextField(blank=True)
    image_pubdate = models.DateTimeField(auto_now_add=True)
    image_source = models.ImageField(upload_to='images/')
    image_tags = models.ManyToManyField(Tag,blank=True)
    def  __unicode__(self):
        return '%s (%s)' % (self.image_title, self.image_author)

class Comment(models.Model):
    comment_author = models.ForeignKey(User)
    comment_image = models.ForeignKey(Image)
    comment_title = models.CharField(max_length=50)
    comment_pubdate = models.DateTimeField(auto_now_add=True)
    comment_text = models.TextField()
    def __unicode__(self):
        return '%s (%s)' % (self.comment_title, self.comment_author)


Django ругает на поле describe в файле forms.py
Ошибка следующая:
KeyError at /upload/

'describe'

Request Method: POST
Request URL: http://localhost/upload/
Django Version: 1.3
Exception Type: KeyError
Exception Value:

'describe'

Почему он ругается на поле describe?

Я знаю, что не очень хорошо развивать два вопроса в одной теме, но все же. Слишком много копи-паст для второго вопроса.

Второй вопрос такой.
В поле tags = forms.SelectMultiple(), файла forms.py мне необходимо записать значения из
<select multiple="multiple" name="tags" id="id_tags">
</select>
Можно наводку куда копать, что бы это осуществить?
PM MAIL   Вверх
bilbobagginz
Дата 17.6.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



не забыл синхронизовать модель с бд ?
Код

cd $djangoprojroot
python manage.py syncdb --settings=mysettings




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Kotakota
Дата 17.6.2011, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.12.2010

Репутация: нет
Всего: нет



Цитата(bilbobagginz @ 17.6.2011,  21:20)
не забыл синхронизовать модель с бд ?
Код

cd $djangoprojroot
python manage.py syncdb --settings=mysettings

Нет, не синхронизировал.
Попробую.
А зачем еще раз синхронизировать?
PM MAIL   Вверх
gomer999999999
Дата 3.2.2013, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.2.2013

Репутация: -1
Всего: -1



Добрый день.
Предлагаем к рассмотрению и тестированию наш проект - Маркетер Плагин.
Продвигаем его успешно во всем мире. Но только 27 января 2013 предоставили в Рунете к тестированию русифицированный плагин с русифицированным интерфейсом. Вся подробная информация наhttp://www.marketerplugin.ru/ 
Предлагаем протестировать наш плагин на только что русифицированном интерфейсеhttp://www.marketerplugin.ru/test_plagina.
В двух словах: плагин предназначен для создания сайтов-визиток и страниц продаж.
Ждем ваших комментариев, отзывов и критики.
Так же будем рады видеть вас на наших страницах в соц сетях
http://www.facebook.com/pages/Marketer-plugin/5288148..
http://vk.com/club46912629
Успехов и новых впечатлений.
С уважением, Богдан
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Веб-разработка и фреймворки | Следующая тема »


 




[ Время генерации скрипта: 0.0946 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.