Mysql
 sql >> Base de données >  >> RDS >> Mysql

stocker la clé étrangère, pas à partir de la méthode POST du formulaire, mais par les données du formulaire que j'ai déjà

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