0

J'essaie de lier le modèle Post au modèle Sujet via une clé étrangère. Lorsque j'exécute la commande makemigrations, cela déclenche une erreur d'importation et indique que le nom 'Topic' n'est pas défini. Quelle pourrait être la cause de cela? Cela semble certainement être défini. J'ai pratiquement exclu que ce ne soit pas un problème au sein de la DB.Erreur de nom: Impossible d'importer [nom du modèle]

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 

Des idées? Je ne vois aucun problème dans ce code, ni fait mon IDE, qui a reconnu le modèle Sujet

Répondre

1

Je considère que vous avez indenté votre code pour le modèle créditons correctement dans votre fichier. Solution: Essayez de définir le sujet ci-dessus.

0

En premier lieu, ce

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

devrait être cette

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

De cette façon, il dit django que vous configurez une clé étrangère à un modèle, non encore déclaré, mais être déclaré plus loin dans le code.

Deuxièmement, vous devez bien en retrait de votre modèle Post et ses méthodes:

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 

Parce que vous avez maintenant, django ne comprend pas que les champs appartiennent non indenté au modèle Post.