Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当childs能够';你不能继承吗?_Python_Django_Design Patterns_Database Design_Model - Fatal编程技术网

Python 当childs能够';你不能继承吗?

Python 当childs能够';你不能继承吗?,python,django,design-patterns,database-design,model,Python,Django,Design Patterns,Database Design,Model,我在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,我已经将其包含在自己的应用程序中,我

我在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\u by('created')
不起作用。当然,我可以继续在基本模型中复制datetime字段,然后复制标题等等,但我认为这是错误的方向。而且,如果我不想接触特定的模型,继承似乎不是一个选择


我正在寻找一些设计模式,或者让我高效地“插入”更多的提供者并查询所有对象,同时又不会造成模型结构和数据库查询的混乱。

你的问题中有一个基本矛盾。您是否认为,对于给定的书籍,由不同提供商创建的
报告的
是相同的

如果是,为什么您不能在
基本手册
上创建一个
创建的
字段并按该字段排序?然后,您可以从
书籍
中删除
创建日期
(如果您不想触摸它,也可以忽略它)

如果没有,您首先希望如何通过
创建的
订购书籍(而不是供应商条目)


另外,对于MongoDB这样的免费模式数据库来说,您试图做的事情听起来是一个很好的例子。在那里,您可以将提供者条目直接嵌入到图书文档中,然后按照类似“从图书的第一个提供者条目创建的
”的方式进行排序。因此,您可以在不进行非规范化的情况下维护自包含的提供程序文档。但是,您仍然需要创建
来对所有提供者表示相同的含义。

您的问题中存在一个基本矛盾。您是否认为,对于给定的书籍,由不同提供商创建的
报告的
是相同的

如果是,为什么您不能在
基本手册
上创建一个
创建的
字段并按该字段排序?然后,您可以从
书籍
中删除
创建日期
(如果您不想触摸它,也可以忽略它)

如果没有,您首先希望如何通过
创建的
订购书籍(而不是供应商条目)


另外,对于MongoDB这样的免费模式数据库来说,您试图做的事情听起来是一个很好的例子。在那里,您可以将提供者条目直接嵌入到图书文档中,然后按照类似“从图书的第一个提供者条目创建的
”的方式进行排序。因此,您可以在不进行非规范化的情况下维护自包含的提供程序文档。尽管如此,您仍然需要
创建的
对所有提供者来说都意味着相同的内容。

给定的书籍永远不会在两个对象中表示。我不想把一本书和下一本书联系起来,它们彼此没有联系。对于提供者,我只是指图书信息的来源。@webjunkie:哦,我在找什么?。。我以为你在那里有一对多的关系。我的错!一本给定的书永远不会用两个对象来表示。我不想把一本书和下一本书联系起来,它们彼此没有联系。对于提供者,我只是指图书信息的来源。@webjunkie:哦,我在找什么?。。我以为你在那里有一对多的关系。我的错!