ошибка внешнего ключа в Django 1.3 - PullRequest
0 голосов
/ 24 марта 2012

Я получаю сообщение об ошибке при попытке сохранить модель с внешним ключом. Название приложения - «Музыка». Мои модели.

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

Таблицы, которые создаются

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'

Код на мой взгляд

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

Я получаю следующую ошибку

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, который является внешним ключом. Почему он не генерирует это в виде столбца, даже если он в моей модели? Как назначить внешний ключ «событие» для нового объекта исполнителя?

1 Ответ

0 голосов
/ 28 июня 2012

Я не осознавал, что «сброс» не удаляет таблицы, а «синхронизация» не изменяет существующие таблицы. Я исправил эту проблему, вручную сбросив таблицы в оболочке и снова выполнив «sync». Что такое «стандарт» для обновления таблиц при изменении моделей (добавление или изменение имен существующих полей?)

...