-
Нашел у David Cramer код кастомного поля, практически подходящего мне по задаче:
from django.db import models class SeparatedValuesField(models.TextField): __metaclass__ = models.SubfieldBase def __init__(self, *args, **kwargs): self.token = kwargs.pop('token', ',') super(SeparatedValuesField, self).__init__(*args, **kwargs) def to_python(self, value): if not value: return if isinstance(value, list): return value return value.split(self.token) def get_db_prep_value(self, value): if not value: return assert(isinstance(value, list) or isinstance(value, tuple)) return self.token.join([unicode(s) for s in value]) def value_to_string(self, obj): value = self._get_val_from_obj(obj) return self.get_db_prep_value(value)
Полностью скопировал пример и после выполнения: python manage.py validate
получил следующее:
[pre]
Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_manager(settings)
File "c:\Python25\Lib\site-packages\django\core\management\__init__.py", line
340, in execute_manager
utility.execute()
File "c:\Python25\Lib\site-packages\django\core\management\__init__.py", line
295, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "c:\Python25\Lib\site-packages\django\core\management\base.py", line 192,
in run_from_argv
self.execute(*args, **options.__dict__)
File "c:\Python25\Lib\site-packages\django\core\management\base.py", line 219,
in execute
output = self.handle(*args, **options)
File "c:\Python25\Lib\site-packages\django\core\management\base.py", line 348,
in handle
return self.handle_noargs(**options)
File "c:\Python25\Lib\site-packages\django\core\management\commands\validate.p
y", line 9, in handle_noargs
self.validate(display_num_errors=True)
File "c:\Python25\Lib\site-packages\django\core\management\base.py", line 246,
in validate
num_errors = get_validation_errors(s, app)
File "c:\Python25\Lib\site-packages\django\core\management\validation.py", lin
e 28, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "c:\Python25\Lib\site-packages\django\db\models\loading.py", line 128, in
get_app_errors
self._populate()
File "c:\Python25\Lib\site-packages\django\db\models\loading.py", line 57, in
_populate
self.load_app(app_name, True)
File "c:\Python25\Lib\site-packages\django\db\models\loading.py", line 72, in
load_app
mod = __import__(app_name, {}, {}, ['models'])
File "C:\django_projects\dj_mmorpg\game\models.py", line 119, in <module>
class Test(models.Model):
File "c:\Python25\Lib\site-packages\django\db\models\base.py", line 80, in __n
ew__
new_class.add_to_class(obj_name, obj)
File "c:\Python25\Lib\site-packages\django\db\models\base.py", line 164, in ad
d_to_class
value.contribute_to_class(cls, name)
TypeError: Error when calling the metaclass bases
unbound method contribute_to_class() must be called with SeparatedValuesFiel
d instance as first argument (got ModelBase instance instead)
[/pre]
Уже несколько раз перечитал документацию, но так и не понял в чем проблема...
Help me, plz! -
Эм... ошибка была как всегда в ДНК )))
Совсем заработался, пытался сделать так:class Test(models.Model): from fields import SeparatedValuesField fld = SeparatedValuesField()
вместо
from fields import SeparatedValuesField class Test(models.Model): fld = SeparatedValuesField()
Все. Тему можно считать закрытой )
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
