web-dev-qa-db-fra.com

Django erreur. Impossible d'affecter doit être une instance

J'obtiens l'erreur suivante lorsque j'essaie d'exécuter une insertion dans l'une de mes tables.

Impossible d'affecter "1": "Team.department_id" doit être une instance de "Department"

Certes, je ne suis pas certain si j'utilise correctement le concept de clé étrangère. L'insert que j'essaie d'exécuter et un extrait de mon models.py sont donnés ci-dessous.

Ce que j'essaie de faire, c'est que lorsque quelqu'un veut créer une nouvelle équipe. Ils doivent l'attacher à un ministère. Par conséquent, l'ID du service doit figurer dans les deux ensembles de tables.

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)

entrez le code ici

13
rahimbah

Vous n'avez pas besoin de transmettre l'ID du département, l'instance elle-même suffit. Les éléments suivants devraient très bien fonctionner:

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

Juste une note, ne nommez jamais vos champs étrangers quelque chose _ id. Cela quelque chose suffit. Django est censé faciliter les choses du point de vue de l'utilisateur et le _id suffixe signifie que vous pensez à la couche de base de données. En fait, si vous avez nommé votre colonne department, Django créera automatiquement department_id colonne dans la base de données pour vous. La façon dont les choses sont, vous faites Django create department_id_id ce qui est plutôt idiot.

26
Anonymous