Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern von Fremdschlüsseln, nicht aus der Formular-POST-Methode, sondern aus Formulardaten, die ich bereits habe

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