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