带有模型的Django错误(ManyToManyField)
我使用django构建应用程序,但在models.py文件中出现以下错误:带有模型的Django错误(ManyToManyField),django,django-models,Django,Django Models,我使用django构建应用程序,但在models.py文件中出现以下错误: creator = models.ManyToManyField(Teacher, on_delete=models.CASCADE) NameError: name 'Teacher' is not defined 这是我在models.py中的当前代码: from django.db import models from django.contrib.auth.models import User # Create
creator = models.ManyToManyField(Teacher, on_delete=models.CASCADE)
NameError: name 'Teacher' is not defined
这是我在models.py中的当前代码:
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class School(models.Model):
nombre = models.CharField(max_length=355)
profesoras = models.ManyToManyField(Teacher)
class Teacher(models.Model):
user = models.ForeignKey(User, related_name="teacherClass", blank=False)
school = models.ManyToManyField(School, blank=True)
class Post(models.Model):
creator = models.ManyToManyField(Teacher, on_delete=models.CASCADE)
title = models.CharField(max_length=255)
text = models.TextField(max_length=2000)
您知道如何解决此错误吗?此错误很好,因为您在声明之前正在使用它,而且您的关系有点混乱。你可以说,在这个应用程序中,你可以拥有你想要的任意多所学校,每个教授在多所学校任教,因此,通过使用多对多关系,可以是这样的:
class School(models.Model):
name = models.CharField(max_length=355)
class Teacher(models.Model):
user = models.ForeignKey(User, related_name="teacherClass", blank=False, on_delete=models.CASCADE)
school = models.ManyToManyField(School, blank=True)
class Post(models.Model):
creator = models.ManyToManyField(Teacher)
title = models.CharField(max_length=255)
text = models.TextField(max_length=2000)
我建议您稍微研究一下数据库中的关系,这样以后就不会有任何类似的问题。错误很好,因为您在声明之前使用了它,而且您的关系有点混乱。你可以说,在这个应用程序中,你可以拥有你想要的任意多所学校,每个教授在多所学校任教,因此,通过使用多对多关系,可以是这样的:
class School(models.Model):
name = models.CharField(max_length=355)
class Teacher(models.Model):
user = models.ForeignKey(User, related_name="teacherClass", blank=False, on_delete=models.CASCADE)
school = models.ManyToManyField(School, blank=True)
class Post(models.Model):
creator = models.ManyToManyField(Teacher)
title = models.CharField(max_length=255)
text = models.TextField(max_length=2000)
我建议您研究一下数据库中的关系,这样以后就不会有类似的问题了。这里的问题是您试图引用一个尚未创建的模型。Django声明在这种情况下该怎么办 如果需要在尚未创建的模型上创建关系 定义后,可以使用模型的名称,而不是模型 对象本身:
class Car(models.Model):
manufacturer = models.ForeignKey(
'Manufacturer',
on_delete=models.CASCADE,
)
# ...
class Manufacturer(models.Model):
# ...
pass
因此,对于您的情况,您只需将模型关系更改为字符串
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class School(models.Model):
nombre = models.CharField(max_length=355)
profesoras = models.ManyToManyField("Teacher") # Make this a string because it has not been defined yet
class Teacher(models.Model):
user = models.ForeignKey(User, related_name="teacherClass", blank=False)
school = models.ManyToManyField(School, blank=True)
class Post(models.Model):
creator = models.ManyToManyField("Teacher", on_delete=models.CASCADE) # Same with this one.
title = models.CharField(max_length=255)
text = models.TextField(max_length=2000)
django文档总是非常有用,并且有很多好的信息。这里的问题是您试图引用一个尚未创建的模型。Django声明在这种情况下该怎么办 如果需要在尚未创建的模型上创建关系 定义后,可以使用模型的名称,而不是模型 对象本身:
class Car(models.Model):
manufacturer = models.ForeignKey(
'Manufacturer',
on_delete=models.CASCADE,
)
# ...
class Manufacturer(models.Model):
# ...
pass
因此,对于您的情况,您只需将模型关系更改为字符串
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class School(models.Model):
nombre = models.CharField(max_length=355)
profesoras = models.ManyToManyField("Teacher") # Make this a string because it has not been defined yet
class Teacher(models.Model):
user = models.ForeignKey(User, related_name="teacherClass", blank=False)
school = models.ManyToManyField(School, blank=True)
class Post(models.Model):
creator = models.ManyToManyField("Teacher", on_delete=models.CASCADE) # Same with this one.
title = models.CharField(max_length=255)
text = models.TextField(max_length=2000)
django文档总是非常有用,并且有很多好的信息。在
Teacher
模型和Post
模型之间添加新行。在Teacher
模型和Post
模型之间添加新行。