Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

armazenando chave estrangeira, não do método POST do formulário, mas pelos dados do formulário que eu já tenho


Não tente atribuir int para payment.student .Atribuir student instância.
payment.student = student.get(pk=1) # Desired value `1` for foreign key assumed

Além disso, você deve seguir as regras de estilo de codificação (leia sobre PEP8 ):
  • nomes de classe iniciados com letras maiúsculas
  • nomes de campos não iniciados com letras maiúsculas
  • variáveis ​​e campos não usam maiúsculas e minúsculas - nomes de classes sim

Seu código funcionará sem essas regras, mas como desenvolvedores Python temos alguns padrões para código legível.

E no Django você não precisa definir o campo de chave primária - ele é criado automaticamente e acessível com instance.pk .
E não tenho certeza se você realmente deseja que sua chave estrangeira aponte para student coluna de student table.
E você pode simplesmente importar student model se estiver definido em outro módulo.

Então, com essas correções, sua definição de classe deve ficar assim:
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)

Agora, qualquer instância do Payment tem o campo implícito pk que significa chave primária. E finalmente uma linha em sua visão com correções 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