Jestem nowy w django, a jako aplikacja do nauki buduję aplikację do rejestrowania wydatków.Kopiowanie pól ManyToMany z jednej instancji modelu na inną
W moim modelu mam trzech klas, które wyglądają tak (ja uprościć je lekko na zwięzłość):
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
jest tylko szablon: gdy system uświadamia sobie, że czas, aby wprowadzić stałe koszta (np. czynsz) powinien pobrać informacje z szablonu i skopiować je w nowej instancji klasy Expense
. Oto odnośny nieco od sposobu odpowiedzialnej pracy RecurringExpense
:
Expense(description=self.description,
amount=self.amount,
category=self.category,
# tags=self.tags,
date=expense_date).save()
Powyższe działa bez zarzutu, ale gdybym odkomentuj linię tags=self.tags
Django narzeka i rzucać się następujący błąd:
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 znam I could create a loop, aby obejść ten problem, ale zastanawiam się, czy istnieje bardziej elegancki sposób, który pozwoliłby mi na natychmiastowe wykonanie tego samego ...
Możesz także zastąpić 'Expense (...)'/'e.save() 'z' Expense.objects.create (...) ' –
To może nie działać, jeśli masz dużą liczbę znaczników (sterownik SQL zależny). W takim przypadku możesz dodawać znaczniki w dużych porcjach do wszystkich tagów. – odedfos