Mysql
 sql >> база данни >  >> RDS >> Mysql

съхраняване на външен ключ, не от POST метода на формуляра, а чрез данни на формуляр, които вече имам

Не се опитвайте да присвоите int за payment.student .Присвояване на student екземпляр.

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

Освен това трябва да следвате правилата за стил на кодиране (прочетете за PEP8 ):

  • имената на класовете започват с главни букви
  • имената на полетата не започват с главни букви
  • променливите и полетата не използват главни букви - имената на класовете използват

Вашият код ще работи и без тези правила, но като разработчици на Python имаме някои стандарти за четим код.

А в Django не е нужно да дефинирате поле за първичен ключ - то се създава автоматично и е достъпно с instance.pk .
И не съм сигурен дали наистина искате външният ви ключ да сочи към student колона на student таблица.
И можете просто да импортирате student модел, ако е дефиниран в друг модул.

Така че с тези корекции вашата дефиниция на клас трябва да бъде като:

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)

Сега всяко плащане има имплицитно поле pk което означава първичен ключ. И накрая ред във вашия изглед с корекции на стила:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разликите между INT и UUID в MySQL

  2. Функция SUM() в MySQL

  3. Да конвертирате SQL дъмп в JSON?

  4. Последно актуализиран идентификатор на ред в Mysql

  5. ClassNotFoundException:com.mysql.jdbc.GoogleDriver