你max_value
正確的設置問題是,你不更新驗證
在IntegerField
__init__
這是FloatField
父它這樣做
def __init__(self, max_value=None, min_value=None, *args, **kwargs):
self.max_value, self.min_value = max_value, min_value
if kwargs.get('localize') and self.widget == NumberInput:
# Localized number input is not well supported on most browsers
kwargs.setdefault('widget', super(IntegerField, self).widget)
super(IntegerField, self).__init__(*args, **kwargs)
if max_value is not None:
self.validators.append(validators.MaxValueValidator(max_value))
if min_value is not None:
self.validators.append(validators.MinValueValidator(min_value))
所以對於完全更新max_value
和min_value
你需要同時更新驗證,這裏是一個辦法
from django.core import validators
class ChildForm(ParentForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
max_value = 50
self.fields['width'].max_value = max_value
for validator in self.fields['width'].validators:
if isinstance(validator, validators.MaxValueValidator):
validator.limit_value = max_value
它應該工作。如果有的話,添加你的視圖代碼和異常。你使用的是什麼版本的Django和Python? –
我正在使用Django 1.11和Python 3.6。例如,該代碼適用於**「label」**屬性,但不適用於**「max_value」**和**「min_value」**。 – Eduardo
你認爲它不起作用,因爲它在驗證時不會失敗? –