2012-03-24 25 views
0

外部キーを持つモデルを保存しようとするとエラーが発生します。アプリ名は「音楽」です。私のモデル。私の見解ではDjango 1.3の外部キーエラー

p = Performer(url=e,performer=name,instrument=inst) 
p.save() 

class MusicEvent(models.Model): 
    eventurl = models.CharField(max_length=200, primary_key=True, db_column=u'eventUrl') # Field name made lowercase. 
    eventtime = models.DateTimeField(db_column=u'eventTime') # Field name made lowercase. 
    location = models.CharField(max_length=75) 
    title = models.CharField(max_length=255) 
    class Meta: 
     db_table = u'music_event' 

class MusicPerformer(models.Model): 
    id = models.IntegerField(primary_key=True) 
    performer = models.CharField(max_length=75) 
    class Meta: 
     db_table = u'music_performer' 

class MusicPerformerEventurl(models.Model): 
    id = models.IntegerField(primary_key=True) 
    performer_id = models.IntegerField() 
    event = models.ForeignKey(MusicEvent) 
    class Meta: 
     db_table = u'music_performer_eventUrl' 

コードを生成している

class Event(models.Model): 
    eventUrl = models.URLField('url', primary_key=True) 
    eventTime = models.DateTimeField('date and time') 
    location = models.CharField('location/venue',max_length='75') 
    title = models.CharField('title',max_length='255') 
    def __unicode__(self): 
     return self.eventUrl 

class Performer(models.Model): 
    url = models.ForeignKey(Event) 
    performer = models.CharField('performer', max_length='75') 
    instrument = models.CharField('instrument or ensemble', max_length='75') 
    def __unicode__(self): 
     return self.performer 

の表は、私は次のようなエラーに

Request Method: POST 
Request URL: http://127.0.0.1:8000/events/import_data/ 
Django Version: 1.3.1 
Exception Type: DatabaseError 
Exception Value:  
table music_performer has no column named url_id 
Exception Location: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py in execute, line 234 
Python Executable: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python 
Python Version: 2.7.2 

を取得するだから、と言っているようですテーブルには列のURLがありません。 hは外部キーです。私のモデルにあっても、それを列として生成しなかったのはなぜですか?新しい出演者オブジェクトに「イベント」外部キーを割り当てるにはどうすればよいですか?

+1

'syncdb'の前または後に' url 'フィールドを追加しましたか? –

+0

私はそれを動作させるために別の名前を試しましたが、上記の出力をコピーする前にflushとsyncdbを実行しました。 – heifetz

+0

私は "フラッシュ"はテーブルを削除しないことに気付かず、 "同期"は既存のテーブルを変更しません。この問題は、シェル内のテーブルを手動で削除し、再度「同期」を実行することで解決しました。 モデルを変更したとき(既存のフィールドの名前を追加または変更するとき)にテーブルを更新する「標準」とは何ですか? – heifetz

答えて

0

"フラッシュ"はテーブルを削除せず、 "同期"は既存のテーブルを変更しないことを認識しませんでした。この問題は、シェル内のテーブルを手動で削除し、再度「同期」を実行することで解決しました。モデルを変更したときにテーブルを更新するための「標準」とは何ですか(既存のフィールドの名前を追加または変更しますか?)

+0

テーブルを削除する)またはデータベースを使用するか、 'django-south'を使用して –

関連する問題