无法将模型导入我的validators.py

时间:2018-08-12 17:35:44

标签: python django

我正在尝试为模型字段创建自定义验证。我的应用程序名为“ 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

1 个答案:

答案 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!")