-
Нашел у David Cramer код кастомного поля, практически подходящего мне по задаче:
Полностью скопировал пример и после выполнения: python manage.py validatefrom 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)
получил следующее: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)
Уже несколько раз перечитал документацию, но так и не понял в чем проблема...
Help me, plz! -
Эм... ошибка была как всегда в ДНК )))
Совсем заработался, пытался сделать так:class Test(models.Model):
from fields import SeparatedValuesField
fld = SeparatedValuesField()
вместо
Все. Тему можно считать закрытой )from fields import SeparatedValuesField
class Test(models.Model):
fld = SeparatedValuesField()
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
