Я обновляюсь с Django 1.6 до 1.7, и я сталкиваюсь с непростой проблемой. У меня есть поле для модели профильного изображения, как это:Рефакторинг для Django 1.7
profile_image = models.ImageField(
upload_to=get_user_uploadto_callable('photos'), null=True,
verbose_name=_('photo'), blank=True)
... и мой get_user_uploadto_callable выглядит следующим образом:
def get_user_uploadto_callable(subdir):
'''Return a callable that returns a custom filepath/filename
for an uploaded file as per `get_user_upload_path`.
'''
def _callable(instance, filename):
return get_user_upload_path(instance, subdir, filename)
return _callable
Однако это уже не приемлемо для Django, и причины этого ошибка при попытке сделать миграции:
ValueError: Could not find function _callable in myproj.core.util.
Please note that due to Python 2 limitations, you cannot serialize unbound method functions (e.g. a method declared
and used in the same class body). Please move the function into the main module body to use migrations.
For more information, see https://docs.djangoproject.com/en/1.7/topics/migrations/#serializing-values
Так что мне нужно, чтобы переместить эту _callable
вне метода (вероятно, переименовать его в нечто вроде user_uploadto_callable
), но S до получения доступа к аргументу subdir
. Есть ли чистый способ сделать это?
К сожалению, это дает мне ту же ошибку: похоже, проблема заключается в том, что функция '_callable' находится внутри другого определения функции. – benwad
Спасибо, эта версия работает! В идеале, хотя было бы неплохо добавить аргумент в определение поля, но я знаю, что это может быть невозможно в Python 2 с системой миграции Django. Я подожду немного, чтобы принять этот ответ, если произойдет что-то волшебное ... – benwad