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
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.