Найти - Пользователи
Полная версия: контроль над выводом полей формы
Начало » Django » контроль над выводом полей формы
1
romankrv
Hi.

Хотел бы убедиться в правильности (или наоборот) следующего:

Для вывода формы и контроля вывода последовательности ее полей
1) для “неконтролируемого” порядка (то есть он контролируется на уровне forms.py) и уменьшения количества кода в темплейте применяем
{{ form.as_p }} имеем компактный код темплейта , но монолит

2) При микшировании форм мы теряем контроль над выводом порядка полей. в случаии использования {{ form.as_p }} То есть например : при использовании ModelForm и дополнительных полей как в сл. коде:
class AddForm(forms.ModelForm):
class Meta:
model = MyModel
password1 = forms.CharField()
password2 = forms.CharField()
то если нужно вставить поле password1 в позицию между позицией полями описанными MyModel то в этом случаии правильно в шаблоне прописывать каждое поле. То есть получаем гранулярность теряем компактность.
3) Возможно ли как то применять сигнальную систему джанги в подобных случаях или оптимальнее п.2


Спасибо
Александр Кошелев
romankrv
1) для “неконтролируемого” порядка
порядок контролируем - он соотвествует порядку декларации полей
romankrv
2) При микшировании форм мы теряем контроль над выводом порядка полей. в случаии использования {{ form.as_p }}
нет. всегда можно поменять
romankrv
3) Возможно ли как то применять сигнальную систему джанги в подобных случаях или оптимальнее п.2
каких случаях? какая “сигнальная система”?

В чем вопрос?
romankrv
Daevaorn
нет. всегда можно поменять
Хорошо. Это можно поменять в случаи что все мои модели - мои, а если я наследуюся от встроенных моделей например django.contrib.auth.models.User
например код:
class UserProfile(User):
middle_name = models.CharField(max_length=100)

class UserAddForm(forms.ModelForm):
password1 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict,), label=_(u'пароль'))
password2 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict,), label=_(u'пароль (повтор)'))
class Meta:
model = UserProfile
exclude = ('last_login', 'user_permissions','date_joined', 'is_staff', 'is_active', 'is_superuser', 'groups', 'password', )
то при использовании в шаблоне
:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
</head>
<body>
{{ form.as_p }}
</body>
</html>
где {{ form }} экземпляр класса UserAddForm.
То в этом случаии будет сначала выводится все что относится к UserProfile а затем поля password1 password2. То есть например я хочу что бы поля password1 password2 следовали после поля определенного в User это поле username.
То есть в этом случаии уже нельзя использовать {{ form.as_p }} только {{ form.username}} {{ form.password1 }} и так далее . Тоесть нужно перечислять в порядке в каком я хочу выводить поля формы. Но я также и теряю при таком перечислении все определения что были заданы в классе формы (например уже не выводится label поля итд )
Как действовать в подобных случаях? то есть как задавать порядок вывода полей класса а не в шаблоне?
И второе правильно ли изменять порядок расположения полей во встроенных классах Джанги таких как User?

Спасибо
Александр Кошелев
Ром, слишком много слов и мало толку. Ведь не мы у тебя что-то спрашиваешь, а ты. Так зачем вещи, которые и так все знают, перепечатывать?:-)
Ты хочешь порядок полей изменить у формы? Ну тогда поменяй его у UserAddForm.fields. В чем проблема то?
romankrv
Но я также и теряю при таком перечислении все определения что были заданы в классе формы (например уже не выводится label поля итд )
Что значит теряешь? Если ты их не выводишь, это не значит что они теряются. Ты их так же можешь все выводить. И лейбл и хелп текст и всё прочее.
romankrv
И второе правильно ли изменять порядок расположения полей во встроенных классах Джанги таких как User?
Мягко говоря, это не нужно.
Ferroman
Порядок расположения полей в классах менять нет необходимости.
Если нужно - меняйте порядок вывода в шаблонах.
romankrv
Daevaorn
Ты их так же можешь все выводить. И лейбл и хелп текст и всё прочее.
Я имею ввиду что если в шаблоне писать {{ form.as_p }} то label help_text итп что указаны в классе формы - это выводится в клиента. Если же {{ form.имя_поля_класса_формы }} то это не выводится в клиента. Почему?
Александр Кошелев
Потому что надо попросить это вывести. У филда есть несколько полей, где это всё лежит.
Ferroman
В джанго тут две крайности - или обобщённый вывод, таблицей или списком или полность задаваемый вручную - через field.свойство.
Хотя вывод
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
в шаблоне:
{{form.subject}}
как
<label for="id_subject">Subject:</label>
<input id="id_subject" type="text" name="subject" maxlength="100" />
Было бы весьма удобно иногда. Полная кастомизация не так часто нужна.
С другой стороны, сделать такое не должно быть сложно…
romankrv
Ferroman
Было бы весьма удобно иногда. Полная кастомизация не так часто нужна.
Вот собственно и почему я затеял этот топик что если я написал один раз в классе формы нужные мне фичи то зачем же снова повторятся при наборе темплейта.
Вообщем я понял что вопрос в джанге по этому поводу не закрыт и может быть финкциональность улучшена. Будем надеется.
Спасибо всем за разъяснение этого вопроса. Буду знать что здесь есть две крайности
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB