Mysql
 sql >> Database >  >> RDS >> Mysql

memorizzazione della chiave esterna, non dal metodo POST del modulo, ma dai dati del modulo che ho già

Non provare ad assegnare int per payment.student .Assegna student esempio.

payment.student = student.get(pk=1) # Desired value `1` for foreign key assumed

Inoltre dovresti seguire le regole dello stile di codifica (leggi informazioni su PEP8 ):

  • i nomi delle classi iniziavano con lettere maiuscole
  • nomi dei campi non iniziati con lettere maiuscole
  • Variabili e campi non usano maiuscole e minuscole - i nomi delle classi sì

Il tuo codice funzionerà senza queste regole, ma come sviluppatori Python abbiamo alcuni standard per il codice leggibile.

E in Django non devi definire il campo della chiave primaria:viene creato automaticamente e accessibile con instance.pk .
E non sono sicuro che tu voglia davvero che la tua chiave esterna punti a student colonna di student tabella.
E puoi semplicemente importare student modello se è definito in un altro modulo.

Quindi, con queste correzioni, la definizione della tua classe dovrebbe essere come:

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)

Ora qualsiasi istanza di pagamento ha il campo implicito pk che sta per chiave primaria. E infine una linea nella tua vista con correzioni di stile:

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