Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#24308 closed Bug (invalid)

ValueError: Cannot serialize: <bound method SiteManager.get_current of <django.contrib.sites.models.SiteManager object at 0xb647c9ac>>

Reported by: jedie Owned by: nobody
Component: Migrations Version: 1.7
Severity: Normal Keywords: MigrationWriter, Site
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Traceback (most recent call last):
  File "./manage.py", line 13, in <module>
    execute_from_command_line(sys.argv)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/management/commands/makemigrations.py", line 124, in handle
    self.write_migration_files(changes)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/management/commands/makemigrations.py", line 152, in write_migration_files
    migration_string = writer.as_string()
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/db/migrations/writer.py", line 131, in as_string
    operation_string, operation_imports = OperationWriter(operation).serialize()
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/db/migrations/writer.py", line 82, in serialize
    arg_string, arg_imports = MigrationWriter.serialize(item)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/db/migrations/writer.py", line 263, in serialize
    item_string, item_imports = cls.serialize(item)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/db/migrations/writer.py", line 333, in serialize
    return cls.serialize_deconstructed(path, args, kwargs)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/db/migrations/writer.py", line 239, in serialize_deconstructed
    arg_string, arg_imports = cls.serialize(arg)
  File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/db/migrations/writer.py", line 409, in serialize
    "topics/migrations/#migration-serializing" % value
ValueError: Cannot serialize: <bound method SiteManager.get_current of <django.contrib.sites.models.SiteManager object at 0xb647c9ac>>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/dev/topics/migrations/#migration-serializing

one up with Pdb:

(Pdb) l
328  	        elif isinstance(value, decimal.Decimal):
329  	            return repr(value), set(["from decimal import Decimal"])
330  	        # Django fields
331  	        elif isinstance(value, models.Field):
332  	            attr_name, path, args, kwargs = value.deconstruct()
333  ->	            return cls.serialize_deconstructed(path, args, kwargs)
334  	        # Classes
335  	        elif isinstance(value, type):
336  	            special_cases = [
337  	                (models.Model, "models.Model", []),
338  	            ]
(Pdb) a
cls = <class 'django.db.migrations.writer.MigrationWriter'>
value = <django.db.models.fields.related.ForeignKey: site>
{{{

one Up again:
{{{
(Pdb) l
234  	        for arg in args:
235  	            arg_string, arg_imports = cls.serialize(arg)
236  	            strings.append(arg_string)
237  	            imports.update(arg_imports)
238  	        for kw, arg in kwargs.items():
239  ->	            arg_string, arg_imports = cls.serialize(arg)
240  	            imports.update(arg_imports)
241  	            strings.append("%s=%s" % (kw, arg_string))
242  	        return "%s(%s)" % (name, ", ".join(strings)), imports
243  	
244  	    @classmethod
(Pdb) a
cls = <class 'django.db.migrations.writer.MigrationWriter'>
path = 'django.db.models.ForeignKey'
args = []
kwargs = {'default': <bound method SiteManager.get_current of <django.contrib.sites.models.SiteManager object at 0xb647c9ac>>, 'to': 'sites.Site'}
}}}


}}}

Change History (2)

comment:1 by jedie, 10 years ago

Ah, seems that this is the trigger for this:

    site = models.ForeignKey(Site,
        default=Site.objects.get_current
    )

I change this to:

    site = models.ForeignKey(Site,
        default=settings.SITE_ID,
    )

comment:2 by Simon Charette, 10 years ago

Resolution: invalid
Status: newclosed

As pointed out in the traceback you should refer to the documentation.

Due to the fact __qualname__ was only introduced in Python 3, Django can only serialize the following pattern (an unbound method used within the class body) on Python 3, and will fail to serialize a reference to it on Python 2:
If you are using Python 2, we recommend you move your methods for upload_to and similar arguments that accept callables (e.g. default) to live in the main module body, rather than the class body.

Last edited 10 years ago by Simon Charette (previous) (diff)
Note: See TracTickets for help on using tickets.
Back to Top