sql >> Database >  >> RDS >> Mysql

externe sleutel opslaan, niet vanuit de POST-methode, maar door formuliergegevens die ik al heb

Probeer niet om int toe te wijzen voor payment.student .Wijs student toe instantie.

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

Bovendien moet u de regels voor coderingsstijlen volgen (lees over PEP8 ):

  • klassenamen begonnen met hoofdletters
  • veldnamen beginnen niet met hoofdletters
  • variabelen en velden gebruiken geen camel case - klassenamen wel

Je code werkt zonder deze regels, maar als Python-ontwikkelaars hebben we enkele normen voor leesbare code.

En in Django hoeft u het primaire sleutelveld niet te definiëren - het wordt automatisch gemaakt en is toegankelijk met instance.pk .
En ik weet niet zeker of je echt wilt dat je buitenlandse sleutel naar student wijst kolom van student table.
En je kunt gewoon student importeren model als het in een andere module is gedefinieerd.

Dus met deze correcties zou je klassedefinitie als volgt moeten zijn:

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)

Nu heeft elke betalingsinstantie een impliciet veld pk wat staat voor primaire sleutel. En tot slot een lijn in je zicht met stijlcorrecties:

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



  1. Hoe SID verschilt van de servicenaam in Oracle tnsnames.ora

  2. SQLSTATE[23000]:schending van integriteitsbeperking met geldige beperking

  3. Wat zijn de verschillen tussen mysql-connector-python, mysql-connector-python-rf en mysql-connector-repackaged?

  4. Hoe kan ik controleren of er een MySQL-tabel bestaat met PHP?