Django формы: как использовать необязательные аргументы в классе формы
Я создаю веб-приложение на Django, которое имеет функции создания и редактирования страниц. Я создаю страницу и редактирую страницы, используя 2 аргумента: заголовок страницы и содержимое страницы.
Поскольку код редактирования и код создания очень похожи, за исключением того, что код редактирования не позволяет изменить заголовок страницы, я хочу сделать код, который может делать и то, и другое в зависимости от ввода.
Это текущий код, который я использую в данный момент.
class createPageForm(forms.Form):
page_name = forms.CharField()
page_contents = forms.CharField(widget=forms.Textarea())
class editPageForm(forms.Form):
page_name = forms.CharField(disabled=True)
page_contents = forms.CharField(widget=forms.Textarea())
Я знаю, что если бы я использовал не классы, а функции, я мог бы сделать что-то вроде этого:
def PageForm(forms.Form, disabled=False):
page_name = forms.CharField(disabled=disabled)
page_contents = forms.CharField(widget=forms.Textarea())
PageForm(disabled=True)
PageForm(disabled=False)
Именно такую функциональность я ищу^^
Я попробовал следующее:
class PageForm(forms.Form):
def __init__(self, disabled=False):
self.page_name = forms.CharField(disabled=disabled)
self.page_contents = forms.CharField(widget=forms.Textarea())
class PageForm(forms.Form, disabled=False):
page_name = forms.CharField(disabled=disabled)
page_contents = forms.CharField(widget=forms.Textarea())
Оба не сработали и получили различные ошибки, которые я не смог обойти. Я надеялся, что кто-нибудь сможет направить меня в правильном направлении, поскольку я не очень хорошо знаком с классами.
Вы можете работать с:
class CreatePageForm(forms.Form):
page_name = forms.CharField()
page_contents = forms.CharField(widget=forms.Textarea())
def __init__(self, *args, disabled=False, **kwargs):
super().__init__(*args, **kwargs)
self.fields['page_contents'].disabled = disabled
и вызвать его с помощью:
CreatePageForm(disabled=True)
PrintOrderDetails(orderNum: 31, productName: "Red Mug", sellerName: "Gift Shop"); PrintOrderDetails(productName: "Red Mug", sellerName: "Gift Shop", orderNum: 31);