首页 > 解决方案 > NameError:名称“配置文件”未定义

问题描述

这是我的models.py 代码。我试图运行 python3.8 manage.py migrate 命令来为数据库创建表,但我不断收到这个错误,这可能是什么问题。Profile 是 models.py 代码中的一个类。如果您需要我的代码的另一部分,请询问

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class Image(models.Model):
    user  = models.ForeignKey(User, on_delete=models.CASCADE, null='True', blank=True)
    image = models.ImageField(upload_to = 'pics/')
    name = models.CharField(max_length=50,blank=True)      
    caption = models.CharField(max_length=250, blank=True)  
    likes =  models.ManyToManyField(User, related_name='likes', blank=True, )
    date_posted = models.DateTimeField(default=timezone.now)


class Comment(models.Model):
    comment = models.TextField()
    image = models.ForeignKey('Image', on_delete=models.CASCADE,related_name='comments',null='True', blank=True )
    name = models.CharField(max_length=100, blank=True)
    user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='comments',null='True', blank=True )
    created = models.DateTimeField(auto_now_add=True, null=True)  

class Profile(models.Model):
    name = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_picture = models.ImageField(upload_to='images/', default='default.png')
    bio = models.TextField(max_length=500, default="My Bio", blank=True)
    followers = models.ManyToManyField(User, related_name="followers", blank=True)
    following = models.ManyToManyField(User, related_name="following", blank=True)  

标签: pythondjango

解决方案


您在构造它之前引用Profile该类。您可以改用字符串文字:

class Comment(models.Model):
    # …
    user = models.ForeignKey(
        'Profile',  # ← a string literal
        on_delete=models.CASCADE,
        related_name='comments',
        null='True',
        blank=True
    )
    # …

最好将字段重命名为profile,以明确ForeignKey引用Profile对象,而不是User对象:

class Comment(models.Model):
    # …
    profile = models.ForeignKey(  # ← rename to profile
        'Profile',
        on_delete=models.CASCADE,
        related_name='comments',
        null='True',
        blank=True
    )
    # …

注意:通常使用settings.AUTH_USER_MODEL[Django-doc]引用用户模型比直接使用User模型 [Django-doc]更好。有关更多信息,您可以查看文档的引用User模型部分


推荐阅读