gpt4 book ai didi

python - Django makemigrations 为未更改的模型字段创建新的迁移文件

转载 作者:行者123 更新时间:2023-12-01 04:29:00 25 4
gpt4 key购买 nike

我使用的如下,我定义了一个自定义 JSONField 类型并向其添加了一个自定义验证器类。

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()]),
),
  1. 知道为什么会出现这种行为吗?我什至将 _ eq _ 更改为始终返回 True,如前所述 here .
  2. 还有为什么 JsonValidator() 添加了 3 次迁移文件中的验证器?

谢谢!

最佳答案

您会得到重复的条目,因为每次初始化字段时都会附加到同一列表。最好使用 default_validators 属性,如 used in the docs 。然后,您可以删除 __init__ 方法。

class JsonField(models.TextField):
default_validators = [validators.validate_slug]

希望这也能解决迁移问题。您可能需要在其停止更改之前创建一个最终迁移(或重新创建添加了 json 字段的上一个迁移)。

关于python - Django makemigrations 为未更改的模型字段创建新的迁移文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32665552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com