Django 1.7 で実行しようとするとmanage.py makemigrations
、次のエラーが発生します。
ValueError: Cannot serialize: <bound method ModelBase.get_default of <class 'printapp.models.JobConfiguration'>>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/dev/topics/migrations/#migration-serializing
get_default
で定義されているメソッドに問題があるようJobConfiguration
です。その定義は以下で繰り返されます。
@classmethod
def get_default(cls):
result = cls()
result.save()
return result
エラー メッセージで提供されたリンクをたどると、「クラス参照」のシリアル化がサポートされている機能のようです。
「クラス参照」は と同じ@classmethod
ですか?
「モジュールの最上位スコープ」に「クラス参照」を配置するにはどうすればよいですか?
移行によってメソッドを追跡する必要があるのはなぜですか? 私は、移行はデータベース スキーマ用であり、クラスで使用されるメソッドのタイプではなく、格納されているデータのタイプのみを追跡するものであると想定していました。
興味深いことに、get_default
以下で繰り返されるように の定義を静的メソッドに変更すると問題は解決しますが、JobConfiguration
クラス名をハードコーディングする必要があります。
@staticmethod
def get_default():
result = JobConfiguration()
result.save()
return result
(いくつかのコンテキスト: このメソッドは、作成されたこれらのフィールドごとに新しい JobConfiguration を作成する効果を持つJobConfiguration.get_default
内から参照されています。)models.OneToOneField(JobConfiguration, default=JobConfiguration.get_default)