web-dev-qa-db-ja.com

Django error。割り当てることができないインスタンスである必要があります

テーブルの1つに挿入を実行しようとすると、次のエラーが表示されます。

「1」を割​​り当てることができません:「Team.department_id」は「Department」インスタンスでなければなりません

確かに、外部キーの概念を正しく使用しているかどうかは少しわかりません。実行しようとしている挿入と、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)

ここにコードを入力してください

13
rahimbah

部門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は、ユーザーの観点と_id接尾辞は、データベース層について考えていることを意味します。実際、列にdepartmentという名前を付けた場合、Djangoは自動的にdepartment_idデータベース内の列。物事は、あなたがDjango create department_id_idこれはかなりばかげています。

26
Anonymous