2014-10-08 2 views
6

Я переключаюсь на Django 1.7. Когда я пытаюсь makemigrations для моего приложения, он падает. В докладе крах:Django 1.7 makemigrations - ValueError: Невозможно выполнить сериализацию функции: lambda

Migrations for 'roadmaps': 
    0001_initial.py: 
    - Create model DataQualityIssue 
    - Create model MonthlyChange 
    - Create model Product 
    - Create model ProductGroup 
    - Create model RecomendedStack 
    - Create model RecomendedStackMembership 
    - Create model RoadmapMarket 
    - Create model RoadmapUser 
    - Create model RoadmapVendor 
    - Create model SpecialEvent 
    - Create model TimelineEvent 
    - Create model UserStack 
    - Create model UserStackMembership 
    - Add field products to userstack 
    - Add field viewers to userstack 
    - Add field products to recomendedstack 
    - Add field product_group to product 
    - Add field vendor to product 
    - Add field product to dataqualityissue 
Traceback (most recent call last): 
    File "manage.py", line 29, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 377, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 288, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 338, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/makemigrations.py", line 124, in handle 
    self.write_migration_files(changes) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/makemigrations.py", line 152, in write_migration_files 
    migration_string = writer.as_string() 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 129, in as_string 
    operation_string, operation_imports = OperationWriter(operation).serialize() 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 80, in serialize 
    arg_string, arg_imports = MigrationWriter.serialize(item) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 245, in serialize 
    item_string, item_imports = cls.serialize(item) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 310, in serialize 
    return cls.serialize_deconstructed(path, args, kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 221, in serialize_deconstructed 
    arg_string, arg_imports = cls.serialize(arg) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 323, in serialize 
    raise ValueError("Cannot serialize function: lambda") 
ValueError: Cannot serialize function: lambda 

я нашел записку о том, что здесь https://code.djangoproject.com/ticket/22892

Существует также ссылки на документацию https://docs.djangoproject.com/en/dev/topics/migrations/#serializing-values

Но это не делает его более ясным для меня. Ошибка meassage не дал мне ключ, где искать проблему.

Есть ли способ, как определить, какая строка точно вызывает проблему?

Любые подсказки?

+0

Как выглядит ваше поле 'Product.dataqualityissue'? – Alasdair

+0

@Alasdair Это 'product = models.ForeignKey (Product, blank = True, null = True)' – matousc

+0

ОК, это поле выглядит нормально. Используете ли вы лямбда-функции в модели «Product» или в любой другой модели? – Alasdair

ответ

9

У нас была эта проблема с использованием лямбда в пользовательском определении поля.

Это не так сложно определить, поскольку оно не указано в traceback, и ошибка не возникает в конкретной модели, которая использует такое настраиваемое поле.

Наш способ исправить:

  • проверить все пользовательские поля (даже в библиотеках 3 участника)
  • изменения лямбда к отзывной, который определен в модуле (т.е. не в пользовательском классе поля)