База классов Django, forms.py, показывает различные формы в зависимости от того, создаете вы их или обновляете

У меня есть forms.py, который показывает выпадающее поле при создании. Но я бы хотел, чтобы при обновлении это поле было скрыто. Возможно ли сделать так, чтобы forms.py показывал 2 разных вида в зависимости от того, создаете вы или обновляете?

asset = forms.ModelChoiceField(required=False, queryset=Asset.objects.filter(Q(is_loaned=False) & Q(may_be_loaned=True)), label="Asset", widget=forms.Select(attrs={'class': 'form-control'}))

forms.py

class Loan_assetForm(forms.ModelForm):
    loaner_name = forms.CharField(label="", max_length=100, widget=forms.TextInput(
        attrs={'class': 'form-control', 'placeholder': 'Loaner name'}))
    location = forms.ModelChoiceField(queryset=Locations.objects.all(), label="Asset loaned form",
                                      widget=forms.Select(attrs={'class': 'form-control'}))
    loaner_address = forms.CharField(label="", max_length=100, widget=forms.TextInput(
        attrs={'class': 'form-control', 'placeholder': 'Loaners address'}))
    loaner_telephone_number = forms.CharField(label="", max_length=100, widget=forms.TextInput(
        attrs={'class': 'form-control', 'placeholder': 'Loaner telephone number'}))
    loaner_email = forms.EmailField(label="", max_length=100, widget=forms.EmailInput(
        attrs={'class': 'form-control', 'placeholder': 'Loaners email'}))
    loaner_quicklink = forms.URLField(label="", max_length=100, required=False, widget=forms.URLInput(
        attrs={'class': 'form-control', 'placeholder': 'Quicklink'}))
    loaner_type = forms.ModelChoiceField(queryset=Loaner_type.objects.all(), label="Loaner type",
                                   widget=forms.Select(attrs={'class': 'form-control'}))
    asset = forms.ModelChoiceField(required=False, queryset=Asset.objects.filter(Q(is_loaned=False) & Q(may_be_loaned=True)), label="Asset",
                                   widget=forms.Select(attrs={'class': 'form-control'}))
    loan_date = forms.DateField(required=False, label="Loan date", widget=forms.widgets.DateTimeInput(format=('%Y-%m-%d'),
        attrs={'class': 'form-control', "type": "date"}))
    return_date = forms.DateField(required=False, label="Return Date", widget=forms.widgets.DateTimeInput(format=('%Y-%m-%d'),
        attrs={'class': 'form-control', "type": "date"}))
    returned = forms.BooleanField(label="Has asset benn returned", initial=False, required=False)
    notes = forms.CharField(required=False, label="Note", max_length=448, widget=TinyMCE(attrs={'cols': 80, 'rows':50,'class': 'form-control'}))

    class Meta:
        model = models.Loan_asset
        fields = [
            "loaner_name",
            "location",
            "loaner_address",
            "loaner_quicklink",
            "loaner_telephone_number",
            "loaner_email",
            "loaner_type",
            "asset",
            "loan_date",
            "return_date",
            "returned",
            "notes",
        ]

Вы можете создать несколько форм для различных нужд (например, одна для создания, другая для обновления). Поскольку у вас могут быть общие поля, вы можете сделать наследование классов.

class ParentAbstractForm():
    #define common fields here

class CreationForm(ParentAbstractForm)
    # specific fields

class UpdateForm(ParentAbstractForm)
    # specific fields
Вернуться на верх