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

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.