Estoy tratando de insertar valores para uno relacionado con muchos modelos a través de un formulario. Estoy teniendo algunas dificultades.

Tengo tres modelos relacionados:

class Member(models.Model):
    member_id = models.AutoField(primary_key=True)
    first_name = models.CharField(max_length=50, default='test first name')
    last_name = models.CharField(max_length=50, default='test last name')

class Loans (models.Model):
    loan_id = models.AutoField(primary_key = True)
    member = models.ForeignKey('Member',related_name='loans')

class Transactions (models.Model):
    transaction_id = models.AutoField(primary_key=True)
    amount = models.DecimalField(max_digits = 10, decimal_places = 2)
    loans = models.ForeignKey('Loans', related_name='transactions')

Básicamente, un Miembro puede tener de uno a muchos Préstamos, un Préstamo puede tener de una a muchas Transacciones (aunque debería ser de 0 a muchas, pero solo estoy probando en este momento).

Tengo un formulario que solicita el nombre completo del miembro, la identificación del préstamo y el monto.

Básicamente, estoy tratando de encontrar al miembro en función del nombre completo, luego obtengo el préstamo en función de la identificación proporcionada y luego creo una nueva transacción para ese préstamo.

Lo que he hecho en mi opinión:

fullName = request.GET.get('full_name')
loanID = request.GET.get('loan_id')
amount = request.GET.get('amount')
#to get first name
firstName = fullName.partition(' ')[0]
#to get last name
lastName = fullName.rsplit(None, 1)[-1]
#to get the member
member = Member.objects.filter(first_name=firstName, last_name = lastName)
#get member's loan based on loanID
l = Loans(loan_id = loanID)
t = Transactions.objects.create(amount = amount, transactions = l)
t.save()

Recibo un error cuando envío el formulario:

'transacciones' es un argumento de palabra clave no válido para esta función

¿Estoy usando el enfoque correcto pero no entiendo las relaciones del modelo? ¿O estoy totalmente equivocado?

Se agradecería cualquier ayuda / dirección,

Gracias de antemano

0
almost a beginner 29 ago. 2016 a las 12:38

2 respuestas

La mejor respuesta

Prueba t = Transactions.objects.create(amount = amount, loans = l)

No hay ningún campo transactions en Transactions. Hay amount y loans y loans es la instancia de Loans que obtuviste en l

2
4140tm 29 ago. 2016 a las 09:51

También puede funcionar de la siguiente manera:

l = Loans.objects.get(loan_id = loanID)
t = Transactions.objects.create(loans = l,amount = amount, ,transaction_id=uuid.uuid4())
t.save()

Y puede obtener transaction_id también como clave principal, que además puede usar como clave externa para otra tabla.

0
Piyush S. Wanare 29 ago. 2016 a las 10:06