Python Django 1.5选择与多表继承相关的延迟

Python Django 1.5选择与多表继承相关的延迟,python,django,django-select-related,multi-table-inheritance,Python,Django,Django Select Related,Multi Table Inheritance,编辑: 我修正了下面的几个拼写错误 我在一个小应用程序中添加了一个zip文件来演示这个问题。您可以下载它并在syncdb和迁移之后运行python manage.py testselectrelateddefer 我在下面添加了一些观察结果 我修复了我的多表继承模型,如下所示: class Image(models.Model): # other fields are removed for simplicity image = models.ImageField(upload_

编辑:

  • 我修正了下面的几个拼写错误
  • 我在一个小应用程序中添加了一个zip文件来演示这个问题。您可以下载它并在syncdb和迁移之后运行python manage.py testselectrelateddefer
  • 我在下面添加了一些观察结果
  • 我修复了我的多表继承模型,如下所示:

    class Image(models.Model):
        # other fields are removed for simplicity
        image = models.ImageField(upload_to="image")
    
    
    class ItemImage(Image):
        # other fields are removed for simplicity
        display_name = models.CharField(max_length=50)
    
    我想查询此模型,并在不需要图像(位于父模型中)时延迟图像字段。我的容器模型看起来有点像这样:

    class Item(models.Model):
        item_image = models.OneToOneField(ItemImage)
    
    test.models.Item.objects.select_related('item_image').defer("item_image__image").get(pk=1)
    
    查询如下所示:

    class Item(models.Model):
        item_image = models.OneToOneField(ItemImage)
    
    test.models.Item.objects.select_related('item_image').defer("item_image__image").get(pk=1)
    
    Django抛出的错误是:

    ValueError: u'image_ptr_id' is not in the list.
    
    如果查询不在父模型中的字段,Django不会引发错误:

    test.models.Item.objects.select_related('item_image').defer("item_image__display_name").get(pk=1)
    
    你知道如何解决这个问题吗

    意见:

  • 正如我前面提到的,只有当延迟字段位于父模型中时,才会发生这种情况;如果延迟字段位于子模型中,则不会发生这种情况
  • 父字段是否有任何额外字段并不重要

  • 你能发布你的确切模型结构吗?它将帮助我们尝试并调试您的错误。@schillingt:不确定您希望进一步做什么。我添加了一个测试程序的zip文件,您可以运行它来查看问题。