Soy nuevo en django y, como aplicación de aprendizaje, estoy creando una aplicación de registro de gastos.Copiar campos de ManyToMany de una instancia de modelo a otra
En mis modelos Tengo tres clases que se ven así (me simplificado ligeramente por razones de brevedad):
class AbstractExpense(models.Model):
description = models.CharField(max_length=100)
amount = models.IntegerField()
category = models.ForeignKey('Category')
tags = models.ManyToManyField('Tag')
insert_date = models.DateTimeField(auto_now=True)
class Meta(object):
abstract = True
class Expense(AbstractExpense):
date = models.DateField('Date')
class RecurringExpense(AbstractExpense):
FREQUENCY_CHOICES = (('D', 'daily'),
('W', 'weekly'),
('M', 'monthly'),
('Y', 'yearly'))
start_date = models.DateField(blank=False)
end_date = models.DateField(blank=True, null=True)
last_check = models.DateField(blank=True, null=True)
frequency = models.CharField(blank=False, max_length=1, choices=FREQUENCY_CHOICES)
RecurringExpense
es simplemente una plantilla: cuando el sistema se da cuenta de que el tiempo para insertar un gasto recurrente (ej .: el alquiler) debe tomar la información en la plantilla y copiarla en una nueva instancia de la clase Expense
. Aquí está la parte correspondiente del método RecurringExpense
a cargo de la obra:
Expense(description=self.description,
amount=self.amount,
category=self.category,
# tags=self.tags,
date=expense_date).save()
lo anterior funciona sin problemas, pero si lo elimine la línea tags=self.tags
, Django se queja y lanzar el siguiente error:
Exception Type: TypeError
Exception Value: 'tags' is an invalid keyword argument for this function
Exception Location: <snip>/django/db/models/base.py in __init__, line 367
I sepa I could create a loop para evitar este problema, pero me pregunto si hay una manera más elegante que me permita realizar lo mismo a la vez ...
También puede reemplazar 'Expense (...)' /'e.save() 'con' Expense.objects.create (...) ' –
Esto podría no funcionar si tiene una gran cantidad de etiquetas (controlador SQL) dependiente). En este caso, puede iterar en grandes porciones sobre todas las etiquetas para agregarlas. – odedfos