У меня есть модель ThreadedComment, которая наследуется от модели Object. ThreadedComment не имеет собственного уникального первичного ключа, полагаясь на первичный ключ объекта («ID»). Вот как строится модель:
class Object(models.Model):
permalink = models.CharField(max_length=128)
status = models.IntegerField()
version = models.IntegerField()
class ThreadedComment(Object):
parent = models.ForeignKey('self', null=True, blank=True, default=None, related_name='children')
parent_object = models.OneToOneField(Object, parent_link=True)
# other fields follow
Это прекрасно работало до django 1.2.3, но когда я обновился до django 1.2.5 (у 1.3 такая же проблема), это происходит, когда я пытаюсь запустить любой тест:
Error: Database test_db couldn't be flushed. Possible reasons:
* The database isn't running or isn't configured correctly.
* At least one of the expected database tables doesn't exist.
* The SQL was invalid.
Hint: Look at the output of 'django-admin.py sqlflush'. That's the SQL this command wasn't able to run.
The full error: relation "threadedcomments_threadedcomment_id_seq" does not exist
LINE 1: SELECT setval('"threadedcomments_threadedcomment_id_seq"', 1...
Проблема в команде sqlflush, которая генерирует и выполняет файл SQL. Проблемная строка:
SELECT setval(pg_get_serial_sequence('"threadedcomments_threadedcomment"','id'), 1, false);
Это явно не сработает, поскольку в этой таблице нет столбца "id".
Что интересно, версия django 1.2.3 выдает похожий вывод:
SELECT setval('"threadedcomments_threadedcomment_id_seq"', 1, false);
но тест все равно продолжается, поэтому я раньше не замечал этой проблемы.
Что я здесь не так делаю? Является ли определение модели неверным, то есть мне нужен первичный ключ в потоке комментария, даже если мне не нужно, чтобы он имел отношение один к одному с объектом? И почему все работало нормально с 1.0 до 1.1 до 1.2.3, а теперь ломается в 1.2.5?