Ошибка Django Syncdb - PullRequest
       24

Ошибка Django Syncdb

2 голосов
/ 29 апреля 2011

У меня есть django.contrib.auth в моих установленных приложениях, и все работало около 10 минут назад. Я удалил существующую базу данных, потому что у меня были проблемы с миграциями на юг. Когда я пытаюсь восстановить его, я получаю сообщение об ошибке.

Ошибка: django.db.utils.DatabaseError: нет такой таблицы: auth_user

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 219, in execute
    self.validate()
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "/usr/lib/python2.7/site-packages/django/core/management/validation.py", line 35, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 146, in get_app_errors
    self._populate()
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 61, in _populate
    self.load_app(app_name, True)
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 78, in load_app
    models = import_module('.models', app_name)
  File "/usr/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/bruk/workspace/hungryDroid/src/hungryDroid/Ingredient/models.py", line 22, in <module>
    class Ingredient(models.Model):
  File "/home/bruk/workspace/hungryDroid/src/hungryDroid/Ingredient/models.py", line 26, in Ingredient
    FKowner = models.ForeignKey(User, default=User.objects.get(pk=1).id)
  File "/usr/lib/python2.7/site-packages/django/db/models/manager.py", line 132, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 342, in get
    num = len(clone)
  File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 80, in __len__
    self._result_cache = list(self.iterator())
  File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 271, in iterator
    for row in compiler.results_iter():
  File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 677, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 732, in execute_sql
    cursor.execute(sql, params)
  File "/usr/lib/python2.7/site-packages/django/db/backends/util.py", line 15, in execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 200, in execute
    return Database.Cursor.execute(self, query, params)
**django.db.utils.DatabaseError: no such table: auth_user**

1 Ответ

8 голосов
/ 29 апреля 2011

Проблема в том, что вы выполняете запрос к пользовательской модели

  File "/home/bruk/workspace/hungryDroid/src/hungryDroid/Ingredient/models.py", line 26, in Ingredient
FKowner = models.ForeignKey(User, default=User.objects.get(pk=1).id)

В процессе syncdb (фактически во время объявления поля, поэтому каждый раз, когда ваш модуль импортируется, как во время этого процесса проверки).

Это обеспечит выполнение запроса auth_user перед созданием таблицы auth_user.

Более безопасный способ получить функциональность с пользователем по умолчанию - сделать

def get_default_user():
    return User.objects.get(pk=1)

А затем в объявлении поля выполните

FKowner = models.ForeignKey(User, default=get_default_user)

В соответствии с ссылка на поле модели по умолчанию может вызываться.Обратите внимание, что у вас будет такая же проблема , если вы используете там get_default_user () - тогда он выполняется сразу, а не по требованию.

...