2016-11-12 108 views
0

我想通过外键将型号发布与型号主题链接。当我运行makemigrations命令时,它会引发一个导入错误,并说名称'Topic'没有被定义。这可能是什么原因?它当然似乎被定义。我几乎排除,这是不是在数据库内的问题。名称错误:无法导入[型号名称]

class Post(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)   
    title = models.CharField(max_length=100) 
    summary = models.TextField(blank=True, null=True) 
    content = models.TextField() 
    draft = models.BooleanField(default=False) 
    details = models.CharField(blank=True, null=True, max_length=250) 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 
    topic = models.ForeignKey(Topic, blank=True, null=True) 
    thumbnail = models.ImageField(upload_to='media', blank=True, null=True) 


    def get_absolute_url(self): 
     return reverse('posts:detail', kwargs={'pk': self.pk}) 

    def __str__(self): 
     return self.title 


class Topic(models.Model): 
    name = models.CharField(max_length=50) 
    description = models.TextField() 
    picture = models.ImageField(upload_to='media', blank=True, null=True) 
    isperson = models.BooleanField(default=False) 
    ispolicy = models.BooleanField(default=False) 
    positive = models.BooleanField(default=True) 
    percent = models.CharField(max_length=5) 

    def __str__(self): 
     return self.name 

任何想法?我没有看到这段代码中有任何问题,我的IDE也没有识别出这个模型主题

回答

1

我在考虑你已经在你的文件中正确缩进了Post模型的代码。

解决方案:尝试定义Post上面的主题。

0

首先,这

topic = models.ForeignKey(Topic, blank=True, null=True) 

应该是这个

topic = models.ForeignKey('Topic', blank=True, null=True) 

这样,它告诉Django,你设置的外键的模型,这是尚未宣布,但会在代码中进一步声明。

其次,你应该正确地缩进安置自己的模型,其方法:

class Post(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True) 
    title = models.CharField(max_length=100) 
    summary = models.TextField(blank=True, null=True) 
    content = models.TextField() 
    draft = models.BooleanField(default=False) 
    details = models.CharField(blank=True, null=True, max_length=250) 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 
    topic = models.ForeignKey('Topic', blank=True, null=True) 
    thumbnail = models.ImageField(upload_to='media', blank=True, null=True) 

    def get_absolute_url(self): 
     return reverse('posts:detail', kwargs={'pk': self.pk}) 

    def __str__(self): 
     return self.title 

因为你现在拥有它,Django不明白,没有锯齿的领域属于Post模型。