2014-10-08 7 views
6

Ich wechsle zu Django 1.7. Wenn ich Makemigrationen für meine Anwendung versuche, stürzt es ab. Der Crash-Bericht ist:Django 1.7 makemigrations - ValueError: Kann nicht serialisieren Funktion: 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 

ich eine Notiz, dass hier https://code.djangoproject.com/ticket/22892

Es gibt auch eine Verknüpfung zu Dokumentation https://docs.djangoproject.com/en/dev/topics/migrations/#serializing-values

Aber es macht es für mich nicht klarer. Die Fehlermeldung hat mir keine Ahnung gegeben, wo ich nach dem Problem suchen sollte.

Gibt es einen Weg, wie man erkennt, welche Linie genau das Problem verursacht?

Irgendwelche Hinweise?

+0

Wie sieht Ihr Feld 'Product.dataqualityissue' aus? – Alasdair

+0

@Alasdair Es ist 'Produkt = models.ForeignKey (Produkt, leer = True, null = True)' – matousc

+0

OK, dieses Feld sieht gut aus. Verwenden Sie Lambda-Funktionen im Produktmodell oder in einem Ihrer anderen Modelle? – Alasdair

Antwort

9

Wir hatten dieses Problem mit der Verwendung von Lambda in der benutzerdefinierten Felddefinition.

Es ist als schwer zu erkennen, da es nicht in Traceback aufgeführt ist, und der Fehler wird nicht auf das bestimmte Modell, das solches benutzerdefiniertes Feld verwendet, ausgelöst.

Unser Weg zu beheben:

  • Überprüfen Sie alle benutzerdefinierten Felder (auch in den 3rd-Party-Bibliotheken)
  • die Lambda-Änderung, aufrufbar, die in dem Modul definiert ist (dh nicht in benutzerdefinierten Feldklasse)
Verwandte Themen