假设我有一个数据库,其中包含电影、书籍和软件,它们都继承自一个单一的“项目”模型。
现在我想在项目上进行数据库查询,但我想挑选与该项目相关的对象,无论是电影、书籍还是软件。如果所有的项目都是同一类型,比如说电影,那么我可以执行以下操作:
这将无论对象类型如何都能找到相关对象吗?这种方法有效吗?有更好的方法吗?
class Item(models.Model):
...
class Movie(models.Model):
item = models.OneToOneField(Item)
...
class Book(models.Model):
item = models.OneToOneField(Item)
...
class Software(models.Model):
item = models.OneToOneField(Item)
...
现在我想在项目上进行数据库查询,但我想挑选与该项目相关的对象,无论是电影、书籍还是软件。如果所有的项目都是同一类型,比如说电影,那么我可以执行以下操作:
Item.objects.prefetch_related('movie')
不过,无论相关对象是什么类型,我都需要能够获取它。我可以运行:
Item.objects.prefetch_related('movie', 'book', 'software')
这将无论对象类型如何都能找到相关对象吗?这种方法有效吗?有更好的方法吗?