Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2010 12:53:57

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает prefix в форме?

Здравствуйте. Такая проблема. У меня на странице форма и формсет.

<form action="" method="post">
<table width="35%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Название организации:</td>
<td>{{ form.name }}</td></tr>
<tr>
<td>Рубрика:</td>
<td>{{ form.rubr }}</td></tr>
<tr>
<td>Город:</td>
<td>{{ form.city }}</td></tr>
<tr>
<td>Улица:</td>
<td>{{ form.street }}</td></tr>
<tr>
<td>Дом:</td>
<td>{{ form.house }}</td></tr>

<tr><td colspan="2">&nbsp; </td></tr>

<tr><td>Телефоны:</td><td></td></tr>
{% for telform in telformset %}
<tr>
<td></td><td>{{ telform.phone }}</td></tr>
{% endfor %}

<tr><td colspan="2">&nbsp; </td></tr>
<tr>

<td><div align="center"><input type="submit" value="Изменить" name="submit" style='width: 100px;'></div></td>
<td><div align="center"><a href="/db/organisations"><input type="button" value="Отмена" name="button" style='width: 100px;'></a></div></td>

</tr>
</table>
</form>
Так вот. Когда обрабатываю request.POST вылетает ошибка ‘TelForm’ object has no attribute ‘__name__’
Во вьюхе код такой:
telephones=mdl.Telephones.objects.filter(org=request.GET[''])
if request.method=='POST':
EntryFormSet=formset(frm.TelForm(request.POST, prefix="telephone"),extra=len(telephones))
form=frm.OrgForm(request.POST,prefix="organisation")
telformset=EntryFormSet()
if form.is_valid() and telformset.is_valid():
...
А модель (форма по ней (ModelForm)):
class Telephones (models.Model):
phone = models.CharField(max_length=15)
org = models.ForeignKey(Organisation)

class Meta:
ordering = ["org"]

def __unicode__(self):
return self.phone
Собственно вопрос: как правильно “раскидать” один POST на две формы? Читал, что нужно использовать префиксы, но не могу понять как они работают. Подскажите, что и где нужно подправить, пожалуйста.



Офлайн

#2 Май 18, 2010 19:46:24

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает prefix в форме?

Видать, кстати, дело не в префиксе:
Exception Value: ‘TelForm’ object has no attribute ‘__name__’
Exception Location: d:\python26\lib\site-packages\django-1.1.1-py2.6.egg\django\forms\formsets.py in formset_factory, line 310
310. return type(form.__name__ + ‘FormSet’, (formset,), attrs)

Как исправить, подскажите?



Офлайн

#3 Май 18, 2010 23:37:19

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Как работает prefix в форме?

Может быть вы наконец покажите код, который создает формсет?

Судя по фотографии, вы в фабрику передаете объект формы, а не класс.



Офлайн

#4 Май 19, 2010 06:42:07

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает prefix в форме?

да, переделал вот так:

def changeorg(request): #Изменение организации
telephones=mdl.Telephones.objects.filter(org=request.GET[''])
if request.method=='POST':
EntryFormSet=formset(frm.TelForm,extra=len(telephones))
form=frm.OrgForm(request.POST,prefix="org")
telformset=EntryFormSet(request.POST,prefix="tel")
if form.is_valid() and telformset.is_valid():
...
else:
EntryFormSet=formset(frm.TelForm,extra=len(telephones))
org=mdl.Organisation.objects.filter(id=request.GET[''])
telformset=EntryFormSet(prefix='tel')
form=frm.OrgForm(initial={
'name':org[0].name,
'street':org[0].street,
'house':org[0].house,
'rubr':org[0].rubr.id,
'city':org[0].city.id
},prefix='org')
...
Теперь когда приходит пост, вылетает ошибка: ValidationError с текстом:
raise ValidationError('ManagementForm data is missing or has been tampered with')
Как исправить это?



Офлайн

#5 Май 19, 2010 06:44:13

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает prefix в форме?

Ну еще у меня в самом начале строка:
from django.forms.formsets import formset_factory as formset



Офлайн

#6 Май 19, 2010 07:16:34

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает prefix в форме?

по докам я так понял, надо что то с ManagementForm мутить, но вот что то не пойму с какой стороны зайти.
Добавляю в шаблон {{ telformset.management_form }} и ничего не происходит. может не туда добавляю?
А еще, судя по-всему, надо какие то дополнительные атрибуты прописывать … Короче, пока так и не разобрался …



Офлайн

#7 Май 19, 2010 13:37:21

Ziberbulger
От:
Зарегистрирован: 2010-05-08
Сообщения: 76
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает prefix в форме?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version