Nie próbuj przypisywać int
dla payment.student
.Przypisz student
przykład.
payment.student = student.get(pk=1) # Desired value `1` for foreign key assumed
Ponadto powinieneś przestrzegać zasad stylów kodowania (przeczytaj o PEP8
):
- Nazwy klas zaczynają się od wielkich liter
- nazwy pól nie zaczynają się od wielkich liter
- zmienne i pola nie używają wielkości liter wielbłąda - nazwy klas tak
Twój kod będzie działał bez tych reguł, ale jako programiści Pythona mamy pewne standardy dotyczące czytelnego kodu.
A w Django nie musisz definiować pola klucza głównego - jest ono tworzone automatycznie i dostępne za pomocą instance.pk
.
I nie jestem pewien, czy naprawdę chcesz, aby Twój klucz obcy wskazywał na student
kolumna student
tabeli.
I możesz po prostu zaimportować student
model, jeśli jest zdefiniowany w innym module.
Więc z tymi poprawkami twoja definicja klasy powinna wyglądać następująco:
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)
Teraz każda instancja Payment ma niejawne pole pk
co oznacza klucz podstawowy. I na koniec linia w twoim widoku z poprawkami stylizacji:
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