Форум сайта python.su
0
Приветствую.
Есть несколько вопросов относительно форм.
1. Как составить форму на основе динамических данных?
К примеру у нас есть некая api которая выводит список говорящих по телефону сотрудников call center.
[ 'Вася', 'Лена', 'Петя']
class User(forms.Form): def __init__(self): forms.Form.__init__(self) persons = CallcenrAPI() # person = [ 'Вася', 'Лена', 'Петя'] for person in persons: self.fields.update({'busy' + person: forms.BooleanField()})
[ ('Вася', 12), ( 'Лена', 23), ('Петя', 63)]
<p title="12"> Вася </p>
from django import forms class User(forms.Form): Nekoe_moe_imy_person_one = forms.BooleanField() Nekoe_moe_imy_person_two = forms.BooleanField() Nekoe_moe_imy_person_fhree = forms.BooleanField() In [7]: c = User(auto_id=False) In [8]: c.as_table()
<tr><th>Nekoe moe imy person one:</th><td><input type="checkbox" name="Nekoe_moe_imy_person_one" /></td></tr>\n<tr><th>Nekoe moe imy person two:</th><td><input type="checkbox" name="Nekoe_moe_imy_person_two" /></td></tr>\n<tr><th>Nekoe moe imy person fhree:</th><td><input type="checkbox" name="Nekoe_moe_imy_person_fhree" /></td></tr>
Отредактировано soln (Дек. 21, 2013 16:44:47)
Офлайн
568
А как правильно?В чем смысл Ваших действий в class User(forms.Form) я не осилил.
Как передать числа шаблону, чтобы использовать к примеру их качестве значения тега title?Тут я перестал Вас понимать окончательно.
{{ form.one_field }} {{ field.one_field.label_tag }} {{ form.two_field }}
Офлайн
0
FishHookЯ хочу составить форму на основе некоторого списка про который мне известно лишь что это список строк.
Если бы Вы сказали сначала чего Вы хотите,
FishHookЯ безусловно ее прочел. Хм ну давайте я пройду и прочту ее еще раз.
Почитайте доку джанги по формам и сделайте для начала все в шаблонах вручную.
FishHook
{{ form.one_field }} {{ field.one_field.label_tag }} {{ form.two_field }}
FishHookКогда это случится единственное зачем я могу вернутся это сказать спасибо.
когда осмыслите происходящее
Офлайн
568
solnОк, что по Вашему делает {{ form }} в шаблоне?
Честно говоря не понял к чему эти теги и к каким формам они относятся
Офлайн
0
FishHookВызовет form.__unicode__()
Ок, что по Вашему делает {{ form }} в шаблоне?
def __unicode__(self): return self.as_table()
FishHookОни есть Но,
Вы должны знать как кастомно
то есть на свой вкус отобразить содержимое формы в шаблоне. Не думаете же Вы, что кроме стандартных
{{ form.as_table }} и {{ form.as_ul }} нет других способов?
{% for person in persons %} <p title={{person.my_var}}> {{ person }} </p> {% endfor %}
<tr><p title='Директор' >Василий:</p><td><input type="checkbox" name="Nekoe_moe_imy_person_one" /></td></tr>
Отредактировано soln (Дек. 21, 2013 19:02:28)
Офлайн
568
Давай сначала, чтобы ты понял и я понял,
мы начнем с самого начала.
и так задача,
она абстрагирована ото всего,
формулируй.
Офлайн
0
Давай попробуем. И да спасибо за терпение.
Задача
Построить форму с checkbox , при наведения курсора мыши на имя поля должна всплывать подсказка.
Для примера возьмём имена сотрудников а подсказкой должна быть зарплата.
Список сотрудников и зарплату мы будем получать из некого 3го места. Важно тут понимать что данные полученные сегодня могут отличатся от вчерашних, единственное на что мы можем рассчитывать что данные будут поступать парно имя и зарплата.
Я извиняюсь но я побегу посмотрю сюда только утром.
Офлайн
75
filed = forms.ModelMultipleChoiceField(queryset=Model.objects.all(), widget=forms.CheckboxSelectMultiple)
class MyModelChoiceField(forms.ModelMultipleChoiceField): def label_from_instance(self, obj): return "My Object #%i" % obj.id class MyForm(ModelForm): filed = MyModelChoiceField(queryset=Model.objects.all(), widget=forms.CheckboxSelectMultiple)

Отредактировано Singularity (Дек. 22, 2013 11:20:45)
Офлайн
0
Всем спасибо. В общем кажется нашел ответы на свои вопросы.
И осталю их тут навсякий случай.
1. Как сформировать динамическую форму.
Ну исходя из:
пыщь раз
пыщь два
пыщь три
Делаю вывод, что описанный мной выше способ валиден.
По крайней мере не один я делаю это, через странное место.
В качестве альтернативы этому способу можно использовать метоклассы, или фабрику классов
Но их не надо использовать если не уверен на все 100% что именно оно тебе и надо.
И вообще.
Singularity.
Простое лучше, чем сложное.
SingularityУра, беру!!!
# help_text – An optional string to use as “help text” for this Field.
In [56]: class Test(forms.Form):iptv_device_none = forms.BooleanField(help_text='45') In [57]: test = Test() In [58]: for field in test: ....: print field ....: print field.help_text ....: <input type="checkbox" name="iptv_device_none" id="id_iptv_device_none" /> 45
Офлайн
568
Как передать связанные данные в шаблон чтерез форму?
widgets = {"my_field": forms.widgets.NumberInput(attrs={"tag": "Lalala", "title": "Chuchuchu", "foo": "bar"})}
3. Возможно ли …А какой смысл в переназываниии полей? Если вам не нравятся стандартные as_p, as_ul, as_table у Вас есть как минимум два пути, 1) Определить свой метод as_nishtyak по аналогии 2) Написать шаблон, рендерящий форму. Вам никто не мешает добавить к полям любые атрибуты
self.fields["my_field"].my_attr = MySuperClass()
{% for field in form %} <div style="float: left; width: 200px"> {{ field.label_tag }} </div> <div> {{ field }} </div> <div> {{ field.field.my_attr.foo }} </div> <br> {% endfor %}
Офлайн