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