5986 (простий спосіб налаштувати порядок полів у формах, що використовують успадкування) - Django

Контекстна навігація

# 5986 закрито Нова функція (виправлено)

Повідомляє: Належить: Компонент: Версія: Серйозність: Ключові слова: Копія: Стадія тріажу: Має патч: Потрібна документація: Потрібні тести: Патч потребує вдосконалення: Легкий вибір: UI/UX:
Міхал Салабанніхто
Форми майстер
Звичайний поле ваги замовлення форми нових форм
marc.garcia@…, matti.haavikko@…, sime, Саймон Шарет, Лоїк Бістуер, засмага Готовий до реєстрації
так ні
ні ні
ні ні

Опис

Розглянемо цей приклад:

простий

UserProfileForm може успадкувати всі товари UserForm: поля та валідатори. Але тоді порядок полів може виглядати дещо безладно:

Було б непогано мати електронну пошту, згруповану за допомогою jabber_id, ім’я та прізвище з ім’ям користувача тощо. Звичайно, це можна зробити за допомогою власного шаблону, але порушує принцип DRY і робить як _ * () методи марними.

Вкладений патч дозволяє вказати власний порядок полів у формі, навіть із успадкованими полями.

Кожне поле може мати додатковий параметр ваги зі значенням за замовчуванням 0. Усі поля сортуються у порядку зростання ваги.

Приклади форм, налаштовані з параметрами ваги:

Вкладення (4)

13 років тому. Правильний патч, включаючи регресійні тести django-fields-order.3.patch (5,6 КБ) - додав Patryk Zawadzki

13 років тому. Додана підтримка for_for_model

Завантажте всі вкладення як .zip

Історія змін (45)

Змінено 13 років тому Міхалом Салабаном

Патч, що додає параметр ваги до нових форм. Поле

коментар: 1 Змінено 13 років тому користувачем patrys @…

Можливо, було б корисніше реалізувати його як метавластивість, що містить бажаний список імен полів (спосіб визначення стовпців для відображення для інтерфейсу адміністратора). Таким чином кожна форма може мати там свій незалежний список, і ви можете спробувати розширити дві форми одночасно, зберігаючи правильний та передбачуваний результат.

коментар: 2 Змінено 13 років тому Міхалом Салабаном

Отже, справа йде зі списком Form.Meta.fields_order.

Змінено 13 років тому Міхалом Салабаном

Другий підхід, з Form.Meta.fields_order

Змінено 13 років тому Патриком Завадзким

Правильний пластир, включаючи регресійні тести

коментар: 3 Змінено 13 років тому Патріком Завадзким

Короткий зміст:
Спеціальний порядок полів у нових формах → [PATCH] Спеціальний порядок полів у нових формах

Змінено 13 років тому Патриком Завадзким

Додана підтримка for_for_model

коментар: 4 Змінено 13 років тому Патриком Завадзким

коментар: 5 подальших заходів: 6 7 Змінено 13 років тому користувачем jkocherhans

Вибачте за відвертість, але я не міг би висловитись більше проти цієї зміни, а точніше синтаксису вага = X. Зараз я працюю над новим класом ModelForm (шукати відповідний потік django-dev), який повинен дозволити щось подібне до атрибута fields_order вище. Це просто називається полями, і воно фактично також обмежить поля, що зустрічаються у формі.

коментар: 6 у відповідь на: 5 Змінено 13 років тому Патриком Завадзким

Вибачте за відвертість, але я не міг би висловитись більше проти цієї зміни, а точніше синтаксису вага = X. Зараз я працюю над новим класом ModelForm (шукати відповідний потік django-dev), який повинен дозволити щось подібне до атрибута fields_order вище. Це просто називається полями, і воно фактично також обмежить поля, що зустрічаються у формі.

Це мало чи нічого спільного з синтаксисом form_for_ *. Це додає можливість упорядкування для всіх підкласів форми, оскільки вона працює лише всередині метакласу. Якщо ваш клас ModelForm або будь-який інший клас розширює форму, він отримує цю функцію безкоштовно.

Єдиним відповідним бітом буде видалення невеликого блоку коду, включаючи коментар про form_for_ *, як тільки ці функції відмирають.

Я думаю, що патч все ще підходить для фіксації, і він додає приємний тест на регресію, щоб ви могли бути впевнені, що все працює як раніше, і буде продовжувати це робити.

коментар: 7 у відповідь на: 5 Змінено 13 років тому Міхалом Салабаном

Мені шкода, що я відвертий, але я не міг би висловитись більше проти цієї зміни, точніше синтаксису вага = X. Зараз я працюю над новим класом ModelForm (пошук django-dev для відповідного потоку), який повинен дозволити щось подібне до атрибута fields_order вище. Це просто називається полями, і воно фактично також обмежить поля, що зустрічаються у формі.

Синтаксис ваги застарілий. Будь ласка, дивіться останню версію виправлення та приклад.

Я знайшов дискусію про ModelForms, але не бачу, чи стосуються вони порядку полів. І як їх можна використовувати для створення Форм, які не базуються на Моделях?

У будь-якому випадку, я не бачу проблем у співіснуванні ModelForms та Meta.fields_order вище.

коментар: 8 Змінено 13 років тому користувачем bear330

Це може бути марним, але мій спосіб замовити поля:

У будь-якому випадку, клас Meta з fields_order повинен бути кращим способом, оскільки це узгодження з конвенцією django.