Ошибка при использовании .save () после добавления множества отношений в оболочке Python - PullRequest
0 голосов
/ 11 марта 2012

С самого начала я создал таблицы в папке myapp и из оболочки запустил

python manage.py sql myapp

, который затем дал ожидаемый результат>

BEGIN;  
CREATE TABLE "myapp_dude" (  
    "id" integer NOT NULL PRIMARY KEY,  
    "name" varchar(128) NOT NULL  
)  
;  
CREATE TABLE "myapp_group_members" (  
    "id" integer NOT NULL PRIMARY KEY,  
    "group_id" integer NOT NULL,  
    "dude_id" integer NOT NULL REFERENCES "myapp_dude" ("id"),  
    UNIQUE ("group_id", "dude_id")  
)  
;  
CREATE TABLE "myapp_group" (  
    "id" integer NOT NULL PRIMARY KEY,  
    "name" varchar(128) NOT NULL  
)  
;  
CREATE TABLE "myapp_membership" (  
    "id" integer NOT NULL PRIMARY KEY,  
    "dude_id" integer NOT NULL REFERENCES "myapp_dude" ("id"),  
    "group_id" integer NOT NULL REFERENCES "myapp_group" ("id"),  
    "date_joined" date NOT NULL,  
    "invite_reason" varchar(64) NOT NULL  
)  
;  
COMMIT;  

Затем я синхронизировал базы данных и начал запускать оболочку python.Он принимает все аргументы в мои таблицы и добавляет имена / группы соответствующим образом, даже членство работает, однако, когда я пытаюсь просто сохранить его, я получаю следующую ошибку:

>>> from myapp.models import Membership, Group, Dude  
>>> from datetime import date  
>>> ringo = Dude.objects.create(name="Ringo Starr")  
>>> paul = Dude.objects.create(name="Paul McCartney")  
>>> beatles = Group.objects.create(name="The Beatles")  
>>> m1 = Membership(dude=ringo, group=beatles,  
...     date_joined=date(1962, 8, 16),  
...     invite_reason="Needed a new drummer.")  
>>> m1.save()  
Traceback (most recent call last):  
  File "<console>", line 1, in <module>  
  File "C:\Python27\lib\site-packages\django\db\models\base.py", line 460, in sa  
ve  
    self.save_base(using=using, force_insert=force_insert, force_update=force_up  
date)  
  File "C:\Python27\lib\site-packages\django\db\models\base.py", line 553, in sa  
ve_base  
    result = manager._insert(values, return_id=update_pk, using=using)  
  File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 195, in  
 _insert  
    return insert_query(self.model, values, **kwargs)  
  File "C:\Python27\lib\site-packages\django\db\models\query.py", line 1436, in  
insert_query  
    return query.get_compiler(using=using).execute_sql(return_id)  
  File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 79  
1, in execute_sql  
    cursor = super(SQLInsertCompiler, self).execute_sql(None)  
  File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 73  
5, in execute_sql  
    cursor.execute(sql, params)  
  File "C:\Python27\lib\site-packages\django\db\backends\util.py", line 34, in e  
xecute  
    return self.cursor.execute(sql, params)  
  File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py", line  
234, in execute  
    return Database.Cursor.execute(self, query, params)  
DatabaseError: table myapp_membership has no column named dude_id  

Я полностью брошен дляцикл с этим, потому что, как вы можете видеть, когда таблицы создаются, создается столбец "dude_id", но в нижней части сообщения об ошибке он говорит, что у него его нет.А также тот факт, что я могу добавить к чуваку и добавить в таблицу членства хорошо, но потом не могу сохранить, не имеет особого смысла.Я просмотрел этот веб-сайт, Google, вы называете его, но я не смог найти решение для этого .. Любое понимание будет высоко ценится! *

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Можете ли вы убедиться, что ваша база данных имеет dude_id, потому что я думаю, что это не так.Это может произойти из-за того, что syncdb не воссоздает таблицы, если они уже существуют.

0 голосов
/ 12 марта 2012

Ошибка довольно очевидна. Ваша схема SQL отличается от той, что определена в django. Попробуйте это

python manage.py reset myapp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...