私はdjangoを初めて使用し、学習アプリとして経費記録アプリケーションを構築しています。
私のモデルには、次のような 3 つのクラスがあります (簡潔にするために少し簡略化しています)。
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: <snip>/django/db/models/base.py in __init__, line 367
この問題を回避するためにループを作成できることはわかっていますが、同じことを一度に実行できる、よりエレガントな方法があるのではないかと思います....