Django 1.5 select_related延迟与多表继承

时间:2014-04-04 23:58:04

标签: python django django-select-related multi-table-inheritance

编辑:

  1. 我在
  2. 下面修了几个拼写错误
  3. 我在一个小应用程序中添加了一个zip文件来演示此问题here。您可以下载它并在syncdb和migrate之后运行python manage.py testselectrelateddefer。
  4. 我在下面添加了几点意见
  5. 我修复了我有一个多表继承模型如下:

    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)
    

    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)
    

    你知道如何解决这个问题吗?

    观察:

    1. 如上所述,只有在延迟字段位于父模型中时才会发生这种情况。如果延迟字段在子模型中,则不会发生。
    2. 父母字段是否有任何额外字段无关紧要。

0 个答案:

没有答案