この質問は私が以前に尋ねたもののフォローアップですhere。この__init __()メソッドを追加すると、私のDjangoモデルが破損するのはなぜですか?
class MyModel(models.Model):
my_field1 = models.DateTimeField(default=datetime.utcnow, editable=False)
my_field2 = models.DateTimeField()
それは動作します:次のように
私はDjangoのモデルを持っている今
>>> MyModel.objects.all()
[<MyModel: MyModel object>, <MyModel: MyModel object>,
I追加MyModel
に次のコンストラクタ:
def __init__(self, **kwargs):
super(MyModel, self).__init__(**kwargs)
if self.my_field2 is None:
self.my_field2 = self.my_field1
そして、それがクラスを破ります:
>>> MyModel.objects.all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "MYvirtualenv/lib/python2.7/site-packages/django/db/models/query.py", line 138, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "MYvirtualenv/lib/python2.7/site-packages/django/db/models/query.py", line 162, in __iter__
self._fetch_all()
File "MYvirtualenv/lib/python2.7/site-packages/django/db/models/query.py", line 965, in _fetch_all
self._result_cache = list(self.iterator())
File "MYvirtualenv/src/django-cache-machine-master/caching/base.py", line 118, in __iter__
obj = iterator.next()
File "MYvirtualenv/lib/python2.7/site-packages/django/db/models/query.py", line 255, in iterator
obj = model_cls.from_db(db, init_list, row[model_fields_start:model_fields_end])
File "MYvirtualenv/lib/python2.7/site-packages/django/db/models/base.py", line 489, in from_db
new = cls(*values)
TypeError: __init__() takes exactly 1 argument (2 given)
比較的シンプルなコンストラクタを追加するとどうなりますか?どのように私はそれを改善する必要がありますか?私はそのコンストラクタのロジックが必要なので、ただそれを排除することはできません。
を呼び出すことができます。あなたはそれを消毒するのを忘れましたか、実際に間違ったクラスを偶然に呼んでいますか? – Anonymous
あなたはargsが不足しているように思えます。 def __init __(自己、* args、** kwargs) – Dean
@Anonymous。はい。それは衛生上の誤りでした。ごめんなさい。今修正されました。 –