Django :У моего файла models.py возникли проблемы с синхронизацией с базой данных.

Я попытался настроить простой файл models.py в рамках этого руководства, которое я изучал в Интернете. Когда я попробовал команду syncdb, я получил следующие ошибки:

      File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/base.py", line 231, in execute
    self.validate()
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/validation.py", line 30, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/loading.py", line 158, in get_app_errors
    self._populate()
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/loading.py", line 64, in _populate
    self.load_app(app_name, True)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/loading.py", line 88, in load_app
    models = import_module('.models', app_name)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/Mike/Desktop/Main/Django-Development/BBN/Knights/models.py", line 3, in <module>
    class Users(models.Model):
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/base.py", line 99, in __new__
    new_class.add_to_class(obj_name, obj)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/base.py", line 219, in add_to_class
    value.contribute_to_class(cls, name)
TypeError: Error when calling the metaclass bases
    unbound method contribute_to_class() must be called with EmailField instance as first argument (got ModelBase instance instead)

Это мой файл models.py:

from django.db import models

class Users(models.Model):
    pen_name = models.CharField(max_length=30)
    email = models.EmailField

class Works(models.Model):
    user = models.ForeignKey(Users)
    date_published = models.DateField()

class Reviews(models.Model):
    work = models.ForeignKey(Works)
    date_published = models.DateField()

class Works_Subscriptions(models.Model):
    user = models.ForeignKey(Users)
    to_work = models.ForeignKey(Works)

class User_Subscriptions(models.Model):
    user = models.ForeignKey(Users)
    to_user = models.ForeignKey(Users)

class Books(models.Model):
    title = models.CharField(max_length=50)
    author = models.CharField(max_length=50)

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

-. 121 ---1434406- Symfony2 -Может ли доктрина :миграции :diff создавать независимый от БД -код вместо SQL? Запуск доктрины php app/console :migrations :diff создает новый класс миграции, необходимый для преобразования текущей схемы базы данных в схему, указанную изменениями в сущностях. Этот пример показывает такие...

Выполнение php app/console doctrine:migrations:diffсоздает новый класс миграции, необходимый для преобразования текущей схемы базы данных в схему, указанную изменениями в сущностях.

В этом примере показан такой сгенерированный класс для создания таблицы fos_user:

class Version20120712145445 extends AbstractMigration
{
    public function up(Schema $schema)
    {
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");        
        $this->addSql("CREATE TABLE fos_user (id INT AUTO_INCREMENT NOT NULL,...);
    }

    public function down(Schema $schema)
    {
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");        
        $this->addSql("DROP TABLE fos_user");
    }
}

. Как видите, сгенерированная миграция привязана к определенному серверу базы данных, в данном случае это MySQL.

Я хотел бы использовать базу данных sqlite в -памяти в тестовых средах из-за (ожидаемых )преимуществ в производительности, сокращающих время выполнения теста.

Я мог бы взять сгенерированный выше SQL и преобразовать его в эквиваленты $table = $schema->createTable(); $table->addColumn();, однако это отнимает много времени и приводит к появлению ошибок из-за плохого человеческого перевода SQL в код.

Может ли команда doctrine :migrations :diff создать код миграции, не зависящий от платформы -, вместо приведенного выше SQL-кода, специфичного для платформы -?

5
задан Jon Cram 23 July 2012 в 16:44
поделиться