Я перепробовал все различные примеры и методы, которые я мог найти для переполнения стека, и по какой-то причине не могу заставить это работать должным образом.
Так что в моем admin.py у меня естьUserForm и и UserAdmin.Основываясь на условии, что в форме проверяется логическое значение, я хочу изменить атрибут 'required' в нескольких различных полях формы на 'false', чтобы я мог эффективно сохранить.Я использовал несколько различных операторов печати, чтобы удостовериться, что «требуемый» фактически изменяется на «ложь» при выполнении условия, однако, когда я пытаюсь и сохраняюсь, он не позволяет мне, поскольку поля выделяются и говорят, что онивсе еще требуются.
Это похоже на то, что save_model не заботится о том, как я редактирую форму, что старая форма и ее «обязательные» атрибуты переопределяют мои изменения.Спасибо за любую помощь!
admin.py
class UserForm(forms.ModelForm):
state = forms.CharField(min_length=2, widget=forms.TextInput(attrs={'placeholder':'CA'}))
zipcode = forms.CharField(max_length=5, min_length=5,)
class Meta:
model = User
fields = '__all__'
class UserAdmin(admin.ModelAdmin):
model = Order
form = UserForm
def save_model(self, request, obj, form, change):
if obj.pickup_only == 1:
form.fields['address'].required = False
form.fields['city'].required = False
form.fields['state'].required = False
form.fields['zipcode'].required = False
return super(UserAdmin, self).save_model(request, obj, form, change)
исправлен код для пользовательской формы:
def clean(self):
cleaned_data = super(UserForm, self).clean()
address = cleaned_data.get('address')
state = cleaned_data.get('state')
city = cleaned_data.get('city')
zipcode = cleaned_data.get('zipcode')
pickup_only = cleaned_data.get('pickup_only')
if pickup_only == True:
# I STUCK IN ADDRESS TO EMPHASIZE THE ERROR IN SCREENSHOT
self.fields_required(['first_name', 'last_name', 'dob', 'phone', 'email', 'address'])
else:
self.cleaned_data['address', 'city', 'state', 'zip code'] = ''
return self.cleaned_data
def fields_required(self, fields):
for field in fields:
print(field)
# RETURNS: first_name, last_name, dob, phone, email, address
if not self.cleaned_data.get(field, ''):
msg = forms.ValidationError("This field is required. Custom.")
self.add_error(field, msg)
При сохранении яполучите это: