Уведомления

Группа в Telegram: @pythonsu

#1 Март 13, 2015 21:27:23

Rebra4
Зарегистрирован: 2012-06-30
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка

models.py

#################################################################################
#Категории
class Category(models.Model):
  name_category=models.CharField(max_length=15,verbose_name='Name')
  def __unicode__(self):
    return self.name_category
#################################################################################
#Подкатегории
class CategoryGo(models.Model):
  option=models.ForeignKey(Category)
  name_category=models.CharField(max_length=15)
  def __unicode__(self):
    return self.name_category
#################################################################################
#Ключевая информация
class Knowledge(models.Model):
  name_category=models.ForeignKey('CategoryGo',verbose_name='Категории')
#################################################################################
translation.py
# -*- coding: utf-8 -*-
from modeltranslation.translator import translator, TranslationOptions
from mind.models import Category,CategoryGo,Knowledge
class KnowledgeTranslationOptions(TranslationOptions):
    fields = ('name_category',)
class CategoryGoTranslationOptions(TranslationOptions):
    fields = ('option','name_category',)
class CategoryTranslationOptions(TranslationOptions):
    fields = ('name_category',)
translator.register(Knowledge, KnowledgeTranslationOptions)
translator.register(CategoryGo, CategoryGoTranslationOptions)
translator.register(Category, CategoryTranslationOptions)
Ошибка
(newsite)alex@plus:~/nextstep/newsite/newsite$ python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/core/management/base.py", line 284, in execute
    self.validate()
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/core/management/base.py", line 310, in validate
    num_errors = get_validation_errors(s, app)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/core/management/validation.py", line 34, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/db/models/loading.py", line 196, in get_app_errors
    self._populate()
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
    self.load_app(app_name, True)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/db/models/loading.py", line 99, in load_app
    models = import_module('%s.models' % app_name)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/registration/models.py", line 15, in <module>
    User = get_user_model()
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 127, in get_user_model
    user_model = get_model(app_label, model_name)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/db/models/loading.py", line 271, in get_model
    self._populate()
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
    self.load_app(app_name, True)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/db/models/loading.py", line 99, in load_app
    models = import_module('%s.models' % app_name)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/modeltranslation/models.py", line 84, in <module>
    handle_translation_registrations()
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/modeltranslation/models.py", line 80, in handle_translation_registrations
    autodiscover()
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/modeltranslation/models.py", line 31, in autodiscover
    import_module(module)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/home/alex/nextstep/newsite/newsite/mind/translation.py", line 13, in <module>
    translator.register(CategoryGo, CategoryGoTranslationOptions)
  File "/home/alex/nextstep/newsite/local/lib/python2.7/site-packages/modeltranslation/translator.py", line 379, in register
    ' "%s"' % (model.__name__, descendants[0]))
IndexError: list index out of range
С простыми моделями, modeltranslation хорошо работает, но по этим моделям что то не хочет.
В чем может быть причина и как исправить?

Офлайн

#2 Март 14, 2015 07:34:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

ошибка

Насколько я знаю, поддержка ForeignKey полей появилась в последней версии, у вас какая версия modeltranslation установлена?



Офлайн

#3 Март 14, 2015 11:38:00

Rebra4
Зарегистрирован: 2012-06-30
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка

версия последния + Django 1.6 и ForeignKey работает, но по примеру выше не работает

Офлайн

#4 Март 14, 2015 12:11:01

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

ошибка

Может, конечно, глупость, но попробуй регистрировать трансляторы в том же порядке, в котором создаются модели.



Офлайн

#5 Март 14, 2015 12:22:45

Rebra4
Зарегистрирован: 2012-06-30
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка

если поменять местами то не находит модель:

modeltranslation.translator.NotRegistered: The model "Knowledge" is not registered for translation

Офлайн

#6 Март 14, 2015 12:51:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

ошибка

А если в ForeignKey в Knowledge не название класса строкой, а непосредственно класс и у всех в Meta указать app_label?



Офлайн

#7 Март 14, 2015 17:28:09

Rebra4
Зарегистрирован: 2012-06-30
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка

не помогло

Офлайн

#8 Март 14, 2015 19:28:31

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

ошибка

код в translation.py не соответствует тому от которого приведена ошибка.

Офлайн

#9 Март 14, 2015 19:55:12

Rebra4
Зарегистрирован: 2012-06-30
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

ошибка

да действительно, я удалил несколько полей CharField и TextField + в translation.py чуть больше fields.
тут выходит, что может быть Category, CategoryGo или Category, Knowledge, а все не хочет быть.
если убрать поле name_category (Knowledge) у translation.py то работает, но по условии задачи так нельзя.

Отредактировано Rebra4 (Март 15, 2015 08:36:30)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version