Django - Предпочтительный дизайн программирования для форм без нарушения DRY - PullRequest
0 голосов
/ 13 сентября 2018

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

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

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

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

1 Ответ

0 голосов
/ 13 сентября 2018

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

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

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

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

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

...