1

编辑:

  1. 我在下面修正了一些错别字
  2. 我在一个小应用程序中添加了一个 zip 文件来演示这个问题。您可以在 syncdb 和迁移后下载并运行 python manage.py testselectrelateddefer。
  3. 我在下面添加了一些观察结果

我修复我有一个多表继承模型,如下所示:

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. 父母字段是否有任何额外字段都没有关系。
4

0 回答 0