1

我想执行预取。关键是:我有一个 baseModel 和继承的模型,这些模型与其他模型一样。但是我的 baseModel 没有与它们链接。这是伪代码:

class Author(models.Model):
    name = models.CharField()

class Movie(PolymorphicModel):
    title = models.CharField()
    author = models.ForeignKey('Author')

class EnglishMovie(Movie):
    pass

class FrenchMovie(Movie):
    pass

class Subtitle(models.Model):
    movie = models.ForeignKey('FrenchMovie', related_name='subtitle')
    text = models.CharField()

如您所见,FrenchMovie 与字幕相关联,但 EnglishMovie 没有。我想预取我所有的电影,并预取字幕。我尝试了几种方法:

def get_queryset(self):
    return Movie.objects.prefetch_related('author', 'subtitle').all()

我得到:ValueError:无法查询“EnglishMovie 对象(1)”:必须是“FrenchMovie”实例。

def get_queryset(self):
    q1 = Movie.objects.prefetch_related('author').all()
    q2 = FrenchMovie.objects.prefetch_related('subtitle').all()
    return q1 | q2

我得到:AssertionError:无法在两个不同的基本模型上组合查询。

有小费吗 ?非常感谢。

4

0 回答 0