class Image(models.Model): description = models.CharField(max_length=500) image = models.ImageField(upload_to='images') image_revision = models.OneToOneField('ImageRevision', primary_key=True) image_static = models.ForeignKey('ImageStatic') class Meta: verbose_name = _(u'Image') verbose_name_plural = _(u'Images') ordering = ['image_revision'] def __unicode__(self): return self.description class Revision(models.Model): """A report of an older version of some Article.""" revision_id = models.PositiveIntegerField(_(u"Revision Number")) article_static = models.ForeignKey('ArticleStatic', null=True) # Editor identification editor = models.ForeignKey(User, verbose_name=_(u'Editor'), null=True) editor_ip = models.IPAddressField(_(u"IP Address of the Editor")) comment = models.CharField(_(u"Editor comment"), max_length=100, blank=True) modified = models.DateTimeField(_(u"Modified at"), default=datetime.now) reverted = models.ForeignKey('self', null=True) objects = RevisionManager() class ImageRevision(Revision): """A report of an older version of some Image.""" #revision_ptr = models.OneToOneField('Revision',primary_key=True,parent_link=True) image_static = models.ForeignKey('ImageStatic') class Meta: verbose_name = _(u'ImageRevision') verbose_name_plural = _(u'ImageRevisions') get_latest_by = 'modified' ordering = ('-id',) objects = models.Manager() rev_manager = ImageRevisionManager() def __unicode__(self): return u'#%s' % self.pk class ImageStatic(models.Model): """ Image metadata not under change control """ creator = models.ForeignKey(User, verbose_name=_('Image Creator'), null=True, related_name='createdimage_set') creator_ip = models.IPAddressField(_("IP Address of the Image Creator"), blank=True, null=True) created_at = models.DateTimeField(default=datetime.now) feature_id = models.PositiveIntegerField(null=True, db_index=True, blank=True) published = models.BooleanField(default=False) project = models.ForeignKey(Project, null=True) source_url = models.URLField(verify_exists=False, null=True) note_text = models.TextField(default="") copy_of = models.ForeignKey("self", null=True, blank=True, related_name='copies') # field to track original copy of an object associator = models.ForeignKey(User, null=True, blank=True) def latest(self): return self.image_set.order_by('image_revision')[0] def first(self): return self.image_set.order_by('-image_revision')[0] I have used multi table inheritance in the ImageRevision model. What is heppening when I call image static objects's latest or first method getting a sql error. >>> project = get_object_or_404(Project, instance='gw') >>> image_static = get_object_or_404(ALL_IMAGES, pk=54, project=project) >>> rev = image_static.imagerevision_set.count() >>> rev = image_static.image_set.count() >>> rev = image_static.image_set.order_by('revision')[0] Traceback (most recent call last): File "", line 1, in File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 238, in _ _getitem__ return list(qs)[0] File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 162, in _ _len__ self._result_cache.extend(list(self._iter)) File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 275, in i terator for row in self.query.results_iter(): File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 206, in results_iter for rows in self.execute_sql(MULTI): File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 1724, in execute_sql sql, params = self.as_sql() File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 261, in as_sql ordering = self.get_ordering() File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 656, in get_ordering self.model._meta, default_order=asc): File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 684, in find_ordering_name opts, alias, False) File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 1321, in setup_joins "Choices are: %s" % (name, ", ".join(names))) FieldError: Cannot resolve keyword 'revision' into field. Choices are: article, description, image, image_revision, image_static >>> rev = image_static.image_set.order_by('imagerevision')[0] Traceback (most recent call last): File "", line 1, in File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 238, in _ _getitem__ return list(qs)[0] File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 162, in _ _len__ self._result_cache.extend(list(self._iter)) File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 275, in i terator for row in self.query.results_iter(): File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 206, in results_iter for rows in self.execute_sql(MULTI): File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 1724, in execute_sql sql, params = self.as_sql() File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 261, in as_sql ordering = self.get_ordering() File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 656, in get_ordering self.model._meta, default_order=asc): File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 684, in find_ordering_name opts, alias, False) File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 1321, in setup_joins "Choices are: %s" % (name, ", ".join(names))) FieldError: Cannot resolve keyword 'imagerevision' into field. Choices are: arti cle, description, image, image_revision, image_static >>> rev = image_static.image_set.order_by('image_revision')[0] Traceback (most recent call last): File "", line 1, in File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 238, in _ _getitem__ return list(qs)[0] File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 162, in _ _len__ self._result_cache.extend(list(self._iter)) File "C:\Python25\Lib\site-packages\django\db\models\query.py", line 275, in i terator for row in self.query.results_iter(): File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 206, in results_iter for rows in self.execute_sql(MULTI): File "C:\Python25\Lib\site-packages\django\db\models\sql\query.py", line 1734, in execute_sql cursor.execute(sql, params) File "C:\Python25\Lib\site-packages\django\db\backends\util.py", line 19, in e xecute return self.cursor.execute(sql, params) File "C:\Python25\Lib\site-packages\django\db\backends\mysql\base.py", line 83 , in execute return self.cursor.execute(query, args) File "C:\Python25\lib\site-packages\MySQLdb\cursors.py", line 166, in execute self.errorhandler(self, exc, value) File "C:\Python25\lib\site-packages\MySQLdb\connections.py", line 35, in defau lterrorhandler raise errorclass, errorvalue OperationalError: (1054, "Unknown column 'cms_imagerevision.revision_ptr_id' in 'on clause'") I can see from the sql query that it is referring a column which is not in the JOIN statement. I have printed sql query and it is this one: SELECT `cms_image`.`description`, `cms_image`.`image`, `cms_image`.`image_revision_id`, `cms_image`.`image_static_id` FROM `cms_image` INNER JOIN `cms_revision` ON (`cms_imagerevision`.`revision_ptr_id` = `cms_revision`.`id`) WHERE `cms_image`.`image_static_id` = 54 ORDER BY `cms_image`.`image_revision_id` DESC Same error happens when image objects delete method is called.