1
我正在使用的是如下,我已經定義了一個自定義的JSONField類型並向它添加了一個自定義驗證器類。Django makemigrations爲未更改的模型字段創建新的遷移文件
models.py
json_ctn = JsonField(verbose_name=_('Json'), null=True, blank=True)
fields.py
class JsonField(models.TextField):
def __init__(self, *args, **kwargs):
if kwargs.get('validators'):
kwargs['validators'].append(JsonValidator())
else:
kwargs.update({'validators': [JsonValidator()]})
super(JsonField, self).__init__(*args, **kwargs)
def __eq__(self, other):
return True
validators.py
@deconstructible
class JsonValidator(object):
error_messages = {
'wrong_json_code': _('Provided custom value is not a valid JSON string.'),
}
def __call__(self, value):
try:
json.loads(value)
except (ValueError, SyntaxError) as err:
raise ValidationError(self.error_messages.get('wrong_json_code'))
return value
def __eq__(self, other):
return True
的問題是,每次我跑makemigrations,即使存在任何沒有變化,新的遷移與以下內容創建:
migrations.AlterField(
model_name='whatever',
name='json_ctn',
field=PATH.fields.JsonField(blank=True, null=True, verbose_name='Json', validators=[PATH.validators.JsonValidator(), PATH.validators.JsonValidator(), PATH.validators.JsonValidator()]),
),
- 任何想法,這是爲什麼行爲 ?我甚至改變了_ eq _到 總是返回True,如here所述。
- 另外爲什麼JsonValidator()被添加3次到遷移文件中的 驗證器?
謝謝!