Django ForeignKey TemplateSyntaxError и ProgrammingError - PullRequest
0 голосов
/ 11 мая 2010

Это мои модели, о которых я хочу рассказать. я хочу, чтобы коллекция появлялась в форме вхождения.

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?

Ответы [ 2 ]

1 голос
/ 11 мая 2010

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

0 голосов
/ 11 мая 2010

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

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

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

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

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

...