Django ImportError:无法导入名称

时间:2017-12-15 17:08:03

标签: django django-models django-2.0

我有一个应用程序notes,模型名称定义为

备注/ models.py

from shorturls.models import ShortUrl

class Note(models.Model):
   # columns here

   def __str___(self):
       return self.title

@receiver(post_save, sender=Note)
def post_save_note_receiver(sender, instance, created, *args, **kwargs):
    if instance and created:
        ShortUrl.objects.create(note=instance)

和另一个应用shorturls来存储每个带模型

的记录的短网址

shorturls / models.py

from notes.models import Note

class ShortUrl(models.Model):
    note = models.OneToOneField(Note, on_delete=models.CASCADE, blank=True)
    short_key = models.CharField()

    def __str__(self):
        return self.short_key

@receiver(pre_save, sender=ShortUrl)
def pre_save_short_url_receiver(sender, instance, *args, **kwargs):
    instance.short_key = unique_short_key_generator(instance)

但在python manage.py makemigrations上,它会出错

File "path_to_app/shorturls/models.py", line 7, in <module>
    from notes.models import Note
ImportError: cannot import name 'Note'

1 个答案:

答案 0 :(得分:2)

您的两个模型文件之间存在循环依赖关系。

您可以在一对一字段中使用字符串:

class ShortUrl(models.Model):
    note = models.OneToOneField('notes.Note', on_delete=models.CASCADE, blank=True)

然后,您可以删除from notes.models import Note以打破循环依赖。