Я попытался настроить простой файл 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-Выполнение 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-кода, специфичного для платформы -?