django ValueError -无法分配:必须是示例

2eafrhcq  于 2023-05-19  发布在  Go
关注(0)|答案(3)|浏览(112)

当我尝试在我的一个表中运行插入时,我得到以下错误。
无法分配“% 1”:“Team.department_id”必须是“Department”示例
诚然,我有点不确定我是否正确地使用了外键概念。下面给出了我试图运行的插入和来自我的www.example.com的一个片段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)
cigdeys3

cigdeys31#

你不需要传递部门id,示例本身就足够了。
以下内容应该可以正常工作:

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

仅备注:千万不要给你的外来字段命名为 something_id。

这一点……就足够了。Django是为了从用户的Angular 让事情变得简单,_id后缀意味着你在考虑数据库层。实际上,如果你将列命名为department,django会自动在数据库中为你创建department_id列。
事情是这样的,你让Django创建department_id_id,这是相当愚蠢的。

lymgl2op

lymgl2op2#

这是谷歌搜索的第一个结果,为新来者提供了一个选择。如果您可以方便地访问id并且不想执行另一个查询,也可以这样做:

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

简而言之,如果您想直接分配id,则使用{foreign_key_name}_id

nafvub8i

nafvub8i3#

@munsu的答案的另一种变体。如果您已经有外部字段的ID。

department_id = 2; #the department id for the new team

new_team = Team(
    nickname = team_name,
    employee_id = employee_id,
    department_id = Department(id=department_id)
)

new_team.save()

# but
new_team.department_id.id # 2 
new_team.department_id.department_name # None you cannot access any other fields

我不知道这是否对任何情况都有用,但它在这里。:)

相关问题