5

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)

4

1 に答える 1