Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 重用django模型_Python_Django_Django Models - Fatal编程技术网

Python 重用django模型

Python 重用django模型,python,django,django-models,Python,Django,Django Models,我有一个应用程序,它有一系列的模型和模板来执行特定的任务(它被称为“用户访问审查”,但这并不重要——这个应用程序被称为“uar”)。当用户完成任务后,我们希望将主要模型中的数据归档到我们所谓的“历史”表中。这些表在结构上与原始的“uar”表相同,但可能位于另一个数据库中,也可能位于同一个数据库中。但是,它们将是只读的,除非通过将它们归档到这些历史记录表中的过程,或者可能是一项任务在若干年后过期 因为我想要完全相同的模型结构,但名称不同,所以我想我应该制作一个名为“uar_history”的应用程

我有一个应用程序,它有一系列的模型和模板来执行特定的任务(它被称为“用户访问审查”,但这并不重要——这个应用程序被称为“uar”)。当用户完成任务后,我们希望将主要模型中的数据归档到我们所谓的“历史”表中。这些表在结构上与原始的“uar”表相同,但可能位于另一个数据库中,也可能位于同一个数据库中。但是,它们将是只读的,除非通过将它们归档到这些历史记录表中的过程,或者可能是一项任务在若干年后过期

因为我想要完全相同的模型结构,但名称不同,所以我想我应该制作一个名为“uar_history”的应用程序,并将models.py文件符号链接到两个应用程序之间。但是当我尝试
syncdb
新模型时,我收到很多关于模型未验证的投诉,因为外键上有
相关的\u name
反向链接


有没有更好的方法?我是否应该将所有存档表都作为模型类的子类?

@Brandon给出了正确的答案,您应该为共享定义使用一个公共抽象模型。它们可以在同一个文件中,也可以在单独的模型文件中(我选择了
common
current
history
作为本例中的应用程序):

通用/models.py 当前/models.py 历史/模型.py
我将使用一个抽象模型来保存字段,然后为“常规”模型定义具体类,为“历史”模型定义具体类。这为您提供了一些灵活性,可以轻松地在两个模型上添加一个新字段,或者只针对一个模型添加一个字段。不幸的是,这不适用于外键关系。当我创建公共字段时,这些字段是其他公共模型的外键,当我在历史中实例化它们时,我会得到一个关于“CommonPerson未安装或是抽象的”的错误。看起来外键问题的解决方案是GenericForeignKey,这可能涉及到过多地更改现有代码,或者将所有外键字段从abstract models.py移到具体字段中,这会破坏abstract models.py的美丽和枯燥。Hmmmm。它与
外键一起工作,但是你不能使用相关的名称(你需要让它自动确定反向名称)。我必须使用相关的名称,因为我在同一个模型中有多个外键-例如,我需要跟踪谁正在被审查,以及他们向谁报告,以及谁做了审查,这些都是同一个“Person”表的FK。相关的名称采用字符串格式,以便查看它是否适用于抽象模型字段。看见
class CommonPostModel(models.Model):
    title = models.CharField(max_length=255)
    body = models.TextField()

    class Meta:
        abstract = True
class CurrentPostModel(CommonPostModel):
    pass
class ArchivePostModel(CommonPostModel):
    pass