编程新手,这对我来说非常困惑......我有2个型号。部门和跨职能项目。两个模型之间的关系创建一个名为Department_Crossfunctionalproject的连接表。
我有另一个名为employee的模型。我想将员工添加到Department_Crossfunctionalproject表中。我怎样才能做到这一点?
我一直在关注本教程:https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships。我不能在DJANGO创建的自动创建的department_crossfunctionalproject连接表上执行此操作吗?
我一直收到以下错误:
CommandError("One or more models did not validate:\n%s" % error_text)
django.core.management.base.CommandError: One or more models did not validate:
companydatabase.membership:"Department_crossfunctionalproject" has a relationship with model <class 'companydatabase.models.Department_crossfunctionalproject'>,
which has either not been installed or is abstract.
模型:
class Crossfunctionalproject(models.Model):
nameofproject = models.CharField(max_length=50)
def __unicode__(self):
return self.nameofproject
class Department(models.Model):
name = models.CharField(max_length=100)
project = models.ManyToManyField(Crossfunctionalproject, null=True, blank=True)
class Employee(models.Model):
employeenumber = models.CharField(max_length=50)
fname = models.CharField(max_length=50, verbose_name='First Name')
mname = models.CharField(max_length=50, null=True, blank=True, verbose_name='Middle Name')
lname = models.CharField(max_length=50, verbose_name='Last Name')
email = models.EmailField(null=True, blank=True, verbose_name='Email')
phone = models.CharField(max_length=50, null=True, blank=True, verbose_name='Phone')
title = models.CharField(max_length=50, null=True, blank=True, verbose_name='Position')
# db table created by DJANGO, I wrote out the model, trying to add extra columns*
class Department_crossfunctionalproject(models.Model):
department = models.ForeignKey(Department)
crossfunctionalproject = models.ForeignKey(Crossfunctonalproject)
membership = models.ManyToManyField(Employee, through="Membership")
class Membership(models.Model):
employee = models.ForeignKey(Employee)
department_crossfunctionalproject = models.ForeignKey(Department_crossfunctionalproject)
whytheyjoined = models.CharField(max_length=100)
答案 0 :(得分:0)
问题是您在'员工'之前定义Department_Crossfunctionalproject
。尝试将Employee
模型的名称作为字符串提供:
membership = models.ManyToManyField('Employee', through="Membership")
答案 1 :(得分:0)
Syncdb命令为INSTALLED_APPS中尚未创建表的所有应用程序创建数据库表。它永远不会发出ALTER TABLE语句来匹配安装后对模型类所做的更改。
如果您手动更改了Department_Crossfunctionalproject
模型,则必须删除该表并再次运行syncdb。
答案 2 :(得分:0)
我喜欢使用South管理我的模型的更改:http://south.aeracode.org/
Django不处理删除列,所以我开始使用它。
答案 3 :(得分:0)
我收到类似的错误消息,但我的问题的原因是不同的,因此修复也不同。 我的问题是,包含每个类定义的文件没有“导入”其他类。
我收到以下错误:
线程中未处理的异常由django.contrib.staticfiles.management.commands.runserver.Command对象的绑定方法Command.inner_run启动,位于0x010E2170
文件“C:\ ... \ lib \ site-packages \ django \ core \ management \ base.py”,第284行,在验证中
提升CommandError(“一个或多个模型未验证:\ n%s”%error_text)
django.core.management.base.CommandError:一个或多个模型未验证: app_name.studio:'instructors'与模型讲师有一个m2m的关系,该讲师没有安装或是抽象的。
我在Studio和Instructor类之间定义了ManyToMany关系。每个类都在models目录中的单独文件中定义(不在相同的models.py文件中)
在app_name / models / studio.py中:
class Studio(models.Model):
instructors = models.ManyToManyField("Instructor", blank=True, null=True, db_table="app_name_instructor_studios")
在app_name / models / instructor.py中:
class Instructor(models.Model):
studios = models.ManyToManyField("Studio", blank=True, null=True, db_table="app_name_instructor_studios")
解决方案:
我按照in this post所述 app_name / models / __ init.py __ 文件添加了缺少的导入语句
from instructor import *
我能够解决的另一种方法是在 app_name / models / studio.py 文件中明确导入Instructor类(但我更喜欢第一种解决方案):
from app_name.models.instructor import Instructor