Копирование полей ManyToMany из одного экземпляра модели в другой

Я новичок в django, и в качестве обучающего приложения я создаю журнал расходов применение.

В моих моделях у меня есть три класса, которые выглядят следующим образом (Я немного упростил их для краткости):

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это просто шаблон:когда система понимает, что время для вставки повторяющихся расходов (например. :Аренда)должна взять информацию из шаблона и скопировать ее в новый экземпляр класса Expense. Вот соответствующий бит из метода RecurringExpense, отвечающего за работу:

Expense(description=self.description,
        amount=self.amount,
        category=self.category,
        # tags=self.tags,
        date=expense_date).save()

Вышеприведенное работает безупречно, но если я раскомментирую строку tags=self.tags, django жалуется и выдает следующую ошибку:

Exception Type: TypeError
Exception Value: 'tags' is an invalid keyword argument for this function
Exception Location: /django/db/models/base.py in __init__, line 367

Я знаю Я мог бы создайте цикл , чтобы обойти эту проблему, но мне интересно, есть ли более элегантный способ, который позволил бы мне выполнить то же самое сразу....

12
задан mac 9 April 2012 в 18:39
поделиться