sql >> Base de Datos >  >> RDS >> Mysql

almacenar clave externa, no desde el método POST del formulario, sino mediante los datos del formulario que ya tengo

No intente asignar int para payment.student .Asignar student instancia.

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

Además, debe seguir las reglas de estilo de codificación (lea sobre PEP8 ):

  • los nombres de las clases comenzaron con letras mayúsculas
  • nombres de campo que no comienzan con letras mayúsculas
  • las variables y los campos no usan mayúsculas y minúsculas, los nombres de clase sí

Su código funcionará sin estas reglas, pero como desarrolladores de Python tenemos algunos estándares para el código legible.

Y en Django no tiene que definir el campo de clave principal:se crea automáticamente y se puede acceder a él con instance.pk .
Y no estoy seguro de si realmente desea que su clave externa apunte a student columna de student tabla.
Y puede importar student model si está definido en otro módulo.

Entonces, con estas correcciones, la definición de su clase debería ser como:

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)

Ahora cualquier instancia de pago tiene un campo implícito pk que significa clave principal. Y, finalmente, una línea en su vista con correcciones de estilo:

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