2016-06-15 56 views
3

当我尝试运行插入到我的一个表中时出现以下错误。Django错误。不能分配必须是一个实例

无法分配“1”:“Team.department_id”必须是一个“部门”实例

诚然,我稍微不确定,如果我正确使用外键的概念。我试图运行的插入以及我的models.py中的代码片段如下。

我想要做的是,当有人想创建一个新的团队。他们必须将其附加到一个部门。因此部门ID应该在两组表中。

new_team = Team(
    nickname = team_name, 
    employee_id = employee_id, 
    department_id = int(Department.objects.get(password = password, department_name = department_name).department_id) 
) 

models.py

class Department(models.Model): 
    department_id = models.AutoField(auto_created=True, primary_key=True, default=1) 
    department_name = models.CharField(max_length=60) 
    head_id = models.CharField(max_length=30) 
    password = models.CharField(max_length=128) 


class Team(models.Model): 
    team_id = models.AutoField(primary_key=True) 
    department_id = models.ForeignKey('Department', related_name = 'Department_id') 
    employee_id = models.CharField(max_length=30) 
    nickname = models.CharField(max_length=60) 
    team_image = models.ImageField(upload_to=get_image_path, blank=True, null=True) 

进入这里

回答

7

代码你并不需要通过部门ID,该实例本身就足够了。以下应该只是罚款:

new_team = Team(
    nickname = team_name, 
    employee_id = employee_id, 
    department_id = Department.objects.get(password = password, department_name = department_name) 
) 

只是注意,不要老是命名洋田东西 _id。那东西就够了。 Django旨在使用户的角度更容易,后缀_id意味着您正在考虑数据库层。事实上,如果您将您的列命名为department,django会自动为您创建数据库中的department_id列。事情的方式,你正在让Django创建department_id_id这是相当愚蠢的。

+1

非常感谢。有效。但是,你们的解释也都有助于我的理解。 – rahimbah

相关问题