Django - предпочтительный дизайн программирования для форм без нарушения DRY

У меня есть приложение, которое использует форму, которую клиент заполняет и отправляет, позволяет называть ее formA. Теперь у меня также есть та же форма, которую используют сотрудники, но с визуализацией некоторых дополнительных полей. В моем forms.py я вынужден включить эти добавленные поля в форму, хотя я не хочу, чтобы они отображались с точки зрения клиентов, иначе я не могу использовать ту же форму для персонала.

В настоящее время я включил в шаблон логику, чтобы игнорировать эти поля, которые мне не нужны, используя тег {% ifnotequal %} с field.label в итерации цикла for по полям, но я чувствую, что это становится слишком громоздким и запутанным для чтения.

Я знаю, что другим вариантом было бы создать отдельную форму, но я чувствую, что это нарушит DRY.

Есть ли в этом случае предпочтительный способ повторного использования форм или лучший способ сделать это?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

class BaseForm(forms.Form):
    field1 = forms.CharField()

class StaffForm(BaseForm):
    staff_field = forms.CharField()

class CustomerForm(BaseForm):
    customer_field = forms.CharField()

Я бы не использовал {% ifnotequal %} в шаблоне, чтобы решить, отображать ли поля или нет - подобная логика не принадлежит шаблону.

А я почему-то даже не думал об использовании наследования. Спасибо вам за помощь!

K.Pardo 13.09.2018 16:48

Другие вопросы по теме