N'essayez pas d'attribuer int
pour payment.student
.Assign student
exemple.
payment.student = student.get(pk=1) # Desired value `1` for foreign key assumed
De plus, vous devez suivre les règles de style de codage (lisez à propos de PEP8
):
- les noms de classe commencent par des majuscules
- les noms de champs ne commencent pas par des majuscules
- les variables et les champs n'utilisent pas la casse camel - les noms de classe le font
Votre code fonctionnera sans ces règles, mais en tant que développeurs Python, nous avons des normes pour un code lisible.
Et dans Django, vous n'avez pas besoin de définir le champ de clé primaire - il est créé automatiquement et accessible avec instance.pk
.
Et je ne sais pas si vous voulez vraiment que votre clé étrangère pointe vers student
colonne de student
table.
Et vous pouvez simplement importer student
modèle s'il est défini dans un autre module.
Ainsi, avec ces corrections, votre définition de classe devrait ressembler à :
from other_app.models import Student
class Payment(models.Model):
student = models.ForeignKey(Student)
date_time = models.DateField(auto_now_add=True)
amount_due = models.DecimalField(max_digits=5, decimal_places=2)
Désormais, toute instance de paiement a un champ implicite pk
qui signifie clé primaire. Et enfin une ligne dans votre vue avec des corrections de style :
payment.student = Student.get(pk=1) # Desired value `1` for foreign key assumed
# payment is instance so all lowercase here
# Student on the right side is a class so started with capital