我正在尝试为模型字段创建自定义验证。我的应用程序名为“ Vocabulary”,其中有一个在models.py中定义的模型,如下所示:-
from Vocabulary.validators import word_exists
class Vocab(models.Model):
id = models.UUIDField(unique=True, primary_key=True)
word = models.CharField(max_length=33, validators=[word_exists])
meaning = models.TextField()
def save(self, *args, **kwargs):
self.id = uuid.uuid4()
super(Vocab, self).save(*args, **kwargs)
def __str__(self):
return self.word
在validators.py文件中,我定义了自定义验证器'word_exists',如下所示:-
from Vocabulary.models import Vocab
from django.core.exceptions import ValidationError
def word_exists(value):
if Vocab.objects.filter(word=value).exists():
raise ValidationError("The word already exists!")
在此文件[validators.py]中,我不断收到无法导入模型Vocab的错误。我也已经完成了迁移,但是我不确定是什么导致了此错误。我正在使用Django 2.0版。非常感谢您的帮助。
App结构如下:-
Vocabulary[App Name]:-
-> models.py
-> validators.py
答案 0 :(得分:1)
由于循环导入而出现以下导入错误
ImportError: cannot import name Vocab
当您从models.py中的validateators.py导入对象,并在validators.py中导入Vocab时,已与models.py中已经定义的 Vocab 发生冲突。
因此,解决此冲突的一种可能方法是在使用它的地方导入 Vocab ,即在功能范围内 word_exists >
from django.core.exceptions import ValidationError
def word_exists(value):
from Vocabulary.models import Vocab
if Vocab.objects.filter(word=value).exists():
raise ValidationError("The word already exists!")