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);

Вернуться на верх