Versuchen Sie nicht, int
zuzuweisen für payment.student
.student
zuweisen Beispiel.
payment.student = student.get(pk=1) # Desired value `1` for foreign key assumed
Außerdem sollten Sie sich an die Regeln des Codierungsstils halten (lesen Sie mehr über PEP8
):
- Klassennamen beginnen mit Großbuchstaben
- Feldnamen beginnen nicht mit Großbuchstaben
- Variablen und Felder verwenden keine Camel-Case - Klassennamen schon
Ihr Code funktioniert ohne diese Regeln, aber als Python-Entwickler haben wir einige Standards für lesbaren Code.
Und in Django müssen Sie kein Primärschlüsselfeld definieren – es wird automatisch erstellt und ist mit instance.pk
zugänglich .
Und ich bin mir nicht sicher, ob Sie wirklich wollen, dass Ihr Fremdschlüssel auf student
zeigt Spalte von student
table.
Und Sie können einfach student
importieren Modell, wenn es in einem anderen Modul definiert ist.
Mit diesen Korrekturen sollte Ihre Klassendefinition also wie folgt aussehen:
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)
Jetzt hat jede Zahlungsinstanz das implizite Feld pk
was für Primary Key steht. Und zum Schluss noch eine Zeile in Ihrer Ansicht mit Styling-Korrekturen:
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