我有两个模型,它们具有一个共同的领域,但背景不同。
models.py:
validators.py
我需要验证此字段,因此我创建了一个文件models.py
,该文件在validators=[validar_cep]
(import re
# from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from .utils.regex import Regex
# ------- Mensagens -------
CEP_INVALIDO = (
'CEP inválido. O CEP deve conter uma entrada com 8 digitos numéricos.'
)
# ------- Regex -------
CEP = re.compile(r'^[0-9]$')
# ------- Validation Functions -------
def validar_cep(valor):
validador = RegexValidator(
regex=CEP,
message=CEP_INVALIDO,
code='invalid'
)
validador(valor)
)中如上所示:
validators.py:
from itertools import cycle
from django.core.exceptions import ValidationError
from django.test import TestCase
from model_mommy import mommy
from saldanprev.core.models import Segurado, SeguroAuto
class TestSeguroAuto(TestCase):
"""
Teste do modelo SeguroAuto
"""
def setUp(self):
self.cep_pernoite = '05271260'
self.cep_maior_frequencia = '05133001'
self.quilometragem_media = 'Até 500 km/mês'
self.seguro_auto = mommy.make(
SeguroAuto,
cep_pernoite=self.cep_pernoite,
cep_maior_frequencia=self.cep_maior_frequencia,
quilometragem_media=self.quilometragem_media,
)
def teste_cep_pernoite_invalido(self):
"""
Verifica a mensagem de erro do atributo cep_pernoite caso seja
persistido uma entrada de cep de pernoite inválida.
"""
mensagem = (
'CEP inválido. O CEP deve conter uma entrada com 8 digitos '
'numéricos.'
)
with self.assertRaisesMessage(ValidationError, mensagem):
mommy.make(SeguroAuto, cep_pernoite='010010-01')
with self.assertRaisesMessage(ValidationError, mensagem):
mommy.make(SeguroAuto, cep_pernoite='010010001')
with self.assertRaisesMessage(ValidationError, mensagem):
mommy.make(SeguroAuto, cep_pernoite='0100100')
最后,我有一个测试文件来测试是否我坚持一个无效值显示正确的消息:
test_seguro_auto.py
self = <SeguroAuto: [010ec070-5b6e-4c3a-8368-8bb674bfada5]>, exclude = ['cep_pernoite'], validate_unique = True
def full_clean(self, exclude=None, validate_unique=True):
"""
Call clean_fields(), clean(), and validate_unique() on the model.
Raise a ValidationError for any errors that occur.
"""
errors = {}
if exclude is None:
exclude = []
else:
exclude = list(exclude)
try:
self.clean_fields(exclude=exclude)
except ValidationError as e:
errors = e.update_error_dict(errors)
# Form.clean() is run even if other validation fails, so do the
# same with Model.clean() for consistency.
try:
self.clean()
except ValidationError as e:
errors = e.update_error_dict(errors)
# Run unique checks, but only for fields that passed validation.
if validate_unique:
for name in errors:
if name != NON_FIELD_ERRORS and name not in exclude:
exclude.append(name)
try:
self.validate_unique(exclude=exclude)
except ValidationError as e:
errors = e.update_error_dict(errors)
if errors:
> raise ValidationError(errors)
E django.core.exceptions.ValidationError: {'cep_pernoite': ['CEP inválido. O CEP deve conter uma entrada com 8 digitos numéricos.']}
/usr/local/lib/python3.6/site-packages/django/db/models/base.py:1166: ValidationError
如果我仅运行此测试,则测试通过。但是,如果我运行所有测试,则所有测试都将失败,并显示以下消息:
validate_unique()
我试图搜索正在发生的事情,但没有找到任何可以帮助我解决问题的好信息。我需要验证此字段,但无法使用自定义验证器。
也许应该与function getLastRowNumber(sheetName){
// sheetName: string; returns intege (the last row number based on column A)
var sheet = getSheet(sheetName);
var column = sheet.getRange('A1:A'); // THIS IS THE PROBLEM
var values = column.getValues(); // get all data in one call
// DEBUG
Logger.log(values[1001][0])
var ct = 0;
while (values[ct][0] != "") {
ct++;
}
return (ct);
}
有关,但是我不知道为什么。这只是预感!
可能是什么?还有另一种有效的方法吗?
PS:在models.py中,我省略了其他模型,因为我认为它们与该问题无关。