我在 Django 中有一个相当简单的模型,比如说Book
:
class Book(models.Model):
name = models.CharField(max_length=255, default="")
description = models.TextField(null=True, blank=True)
creation_date = models.DateTimeField()
因为结构和数据基本上来自外部 API,所以我将它包含在它自己的应用程序中,我不想修改它。
现在我想在项目中添加不同书籍的另一个来源,我不确定这里最好的解决方案是什么。
假设第二个模型是:
class NextBook(models.Model):
title = models.CharField(max_length=255, default="")
long_description = models.TextField(null=True, blank=True)
created = models.DateTimeField()
所以基本字段在那里,但有不同的名称。要将两者结合在一起,我可能可以使用另一个带有 GenericForeignKey 的模型:
class BaseBook(models.Model):
book_type = models.ForeignKey(ContentType)
book_id = models.PositiveIntegerField()
book_object = generic.GenericForeignKey('book_type', 'book_id')
但是我不能查询所有的书,因为例如BaseBook.objects.all().order_by('created')
不起作用。当然,我可以继续在基本模型中复制一个日期时间字段,然后复制标题等等,但我认为这将是错误的方向。如果我不想触及特定模型,继承似乎也不是一种选择。
我正在寻找一些设计模式或一些让我有效地“插入”更多提供程序并查询所有对象的东西,同时又不会造成模型结构和数据库查询的巨大混乱。