2012-02-21 5 views
0

У меня есть функция сгенерирована (переменная) в другом файле, я хочу вызвать ее в файле models.py. вот мой код.вызов пользовательской функции в модели django

class Season(models.Model): 
    Year = models.CharField(max_length=6, default=getyear()) 
    start_date = models.DateField() 
    end_date = models.DateField() 
    league = models.ManyToManyField(League) 
    fixgen = models.BooleanField(default=False) 
    in_progress = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.Year 

    def createfixtures(self): 
     generate(self) 

, но когда я запускаю файл, он дает мне следующую ошибку.

Validating models... 
Unhandled exception in thread started by <function inner_run at 0xa05eae4> 
Traceback (most recent call last): 
    File "/usr/lib/pymodules/python2.7/django/core/management/commands/runserver.py", line 48, in inner_run 
    self.validate(display_num_errors=True) 
    File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 249, in validate 
    num_errors = get_validation_errors(s, app) 
    File "/usr/lib/pymodules/python2.7/django/core/management/validation.py", line 35, in get_validation_errors 
    for (app_name, error) in get_app_errors().items(): 
    File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 146, in get_app_errors 
    self._populate() 
    File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 64, in _populate 
    self.load_app(app_name) 
    File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 78, in load_app 
    models = import_module('.models', app_name) 
    File "/usr/lib/pymodules/python2.7/django/utils/importlib.py", line 35, in import_module 
__import__(name) 
    File "/home/yousuf/PycharmProjects/CricketManager/../CricketManager/Cricket/models.py", line 4, in <module> 
    from Cricket.fixtures import generate 
    File "/home/yousuf/PycharmProjects/CricketManager/Cricket/fixtures.py", line 3, in <module> 
    from Cricket.models import League, Season, Team, Fixture 
    File "/home/yousuf/PycharmProjects/CricketManager/Cricket/models.py", line 4, in <module> 
    from Cricket.fixtures import generate 
ImportError: cannot import name generate 

можно импортировать функцию, которая отлично работает, если я назову ее из оболочки django. теперь я хочу иметь его как часть меню администратора django.

Если кто-то может посмотреть на него и посмотреть, в чем проблема, или какая работа для него.

// Юзуф

ответ

0

Похоже, у вас есть круговой импорт между Cricket.models и Cricket.fixtures. Вам нужно будет переместить общие определения в третий модуль, чтобы разбить цикл.

+0

это решило мою проблему – debuggerpk

2

Не видя вашу структуру проекта, трудно точно сказать, почему импорт терпит неудачу. Однако, как правило, каталог «fixtures» приложения просто содержит JSON/XML/любые файлы и поэтому не рассматривается как модуль (с помощью файла __init__.py).

Если в этом каталоге нет файла __init__.py, каталог не является модулем python и поэтому не может быть импортирован. Простейшим решением было бы просто добавить этот файл (он может быть пустым, он просто должен существовать). Однако из-за того, что я сказал выше, включение кода python в имя каталога «fixtures» - плохая идея. Это нарушает соглашение о том, для чего наиболее часто используется это имя каталога, и, таким образом, становится путаницей для других разработчиков.