База классов 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