2010-05-11 3 views
0

Это мои модели, которые я хочу рассказать. Я хочу, чтобы коллекция появлялась в форме появления.Django ForeignKey TemplateSyntaxError and ProgrammingError

class Collection(models.Model): 
    id = models.AutoField(primary_key=True, null=True) 
    code = models.CharField(max_length=100, null=True, blank=True) 
    address = models.CharField(max_length=100, null=True, blank=True) 
    collection_name = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.collection_name 

    class Meta: 
     db_table = u'collection' 
     ordering = ('collection_name',) 

class Occurrence(models.Model): 
    id = models.AutoField(primary_key=True, null=True) 
    reference = models.IntegerField(null=True, blank=True, editable=False) 
    collection = models.ForeignKey(Collection, null=True, blank=True, unique=True), 
    modified = models.DateTimeField(null=True, blank=True, auto_now=True) 
    class Meta: 
     db_table = u'occurrence' 

Каждый раз, когда я иду, чтобы проверить объект Occurrence я получаю эту ошибку

TemplateSyntaxError at /admin/hotiapp/occurrence/ 
Caught an exception while rendering: column occurrence.collection_id does not exist 
LINE 1: ...LECT "occurrence"."id", "occurrence"."reference", "occurrenc.. 

И каждый раз, когда я пытаюсь добавить новый объект вхождений я получаю эту ошибку

ProgrammingError at /admin/hotiapp/occurrence/add/ 
column occurrence.collection_id does not exist 
LINE 1: SELECT (1) AS "a" FROM "occurrence" WHERE "occurrence"."coll... 

Что я делаю неправильно? или как работает ForeignKey?

ответ

1

Проблема в том, что вы не обновили определение таблицы базы данных с момента добавления ForeignKey. syncdb не делает этого для вас, как указано в документации. Вам нужно обновить SQL вручную или использовать такой инструмент, как South.

+0

Да, это была проблема. благодаря –

0

Вы уверены, что вы имеете в виду

collection = models.ForeignKey(Collection, null=True, blank=True, unique=True), 

Nullable и уникальным? Это может быть невозможно в некоторых базах данных.

Как правило, уникальное ограничение здесь не имеет особого смысла.

Вы пытаетесь заставить отношения 1 к 1? Используйте OneToOneField. http://docs.djangoproject.com/en/1.1/ref/models/fields/#django.db.models.OneToOneField