Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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 - Fatal编程技术网

Python 如何在django中创建自定义数据源?

Python 如何在django中创建自定义数据源?,python,django,Python,Django,我想允许管理员从第三方服务导入数据。为此,我想在“管理”面板中列出所有可能要导入的内容,并允许管理员选择要导入的内容。 以下是我想做的: class Movie(models.Model): title = #... length = #... #... class ImportManager(models.Manager): def all(self): # what should go here? class MovieImporter(M

我想允许管理员从第三方服务导入数据。为此,我想在“管理”面板中列出所有可能要导入的内容,并允许管理员选择要导入的内容。
以下是我想做的:

class Movie(models.Model):
    title = #...
    length = #...
    #...

class ImportManager(models.Manager):
    def all(self):
        # what should go here?

class MovieImporter(Movie):
    objects = ImportManager()

    class Meta:
        proxy = True
        verbose_name_plural = verbose_name = 'Import Movies'

admin.site.register(Movie)
admin.site.register(ImportMovie)

我对如何从ImportManager返回QuerySet感到困惑。如果甚至没有数据库,而且文档中也不清楚,那么只需将对象列表传递给QuerySet即可。有什么想法吗?

看起来你在做你自己的经理。在管理者的方法中,您需要做的只是对数据库进行一些特殊的查询

这里有一些关于如何为自定义管理器创建一些方法的示例。
希望能有所帮助。

看起来你在做自己的经理。在管理者的方法中,您需要做的只是对数据库进行一些特殊的查询

这里有一些关于如何为自定义管理器创建一些方法的示例。
希望对您有所帮助。

您可以通过

qs = Movie.objects.get_queryset()
qs._result_cache = map(lambda x: Movie(*x),
     [(1, 'The Godfather', '175'), ...])
并在管理员变更列表中显示它。但是,您必须破解QuerySet方法并禁用管理操作,如过滤器,以防止额外的实际数据库查询

为简单起见,为什么不将数据同步到本地数据库,并使用具有“admin picked”等值的额外状态字段存储它们呢?
或者,您可以将数据放在另一个表中,并将拾取的数据同步到电影表


另一个直接的方法是允许工作人员在变更列表或您的自定义视图中按电影类别和其他可能的元条件进行拾取/筛选,然后在芹菜任务中执行电影信息同步。

您可以通过

qs = Movie.objects.get_queryset()
qs._result_cache = map(lambda x: Movie(*x),
     [(1, 'The Godfather', '175'), ...])
并在管理员变更列表中显示它。但是,您必须破解QuerySet方法并禁用管理操作,如过滤器,以防止额外的实际数据库查询

为简单起见,为什么不将数据同步到本地数据库,并使用具有“admin picked”等值的额外状态字段存储它们呢?
或者,您可以将数据放在另一个表中,并将拾取的数据同步到电影表


另一个直截了当的方法是允许员工在变更列表或您的自定义视图中按电影类别和其他可能的元条件进行拾取/筛选,然后在芹菜任务中执行电影信息同步。

可能很难让内置管理员处理外部非SQL“数据库”(除非您编写自定义DB后端,可能使用,或使返回的类似管理器的对象以某种方式实现管理员希望使用的所有方法)


你也许可以破解它,但我打赌你的时间花在导入上会更好。你可以继承管理模板,让它看起来与管理站点的其他部分非常相似。

让内置管理与外部非SQL“数据库”一起工作可能会很难(除非您编写自定义DB后端,可能使用,或使返回的类似管理器的对象以某种方式实现管理员希望使用的所有方法)


你也许可以破解它,但我打赌你的时间花在导入上会更好。你可以继承管理模板,使它看起来与管理站点的其他部分非常相似。

我对你想要的内容的总结:一个新的模型类,用外部的,可能是只读的“数据库”实现作为它的后端。我还设想您想将电影导入主数据库?在
Movie
类中有一个单独的
ImportManager
,在我看来更可能是您想要的-
Movie.import\u对象
或类似的东西。@ChrisMorgan,是的,这是我想做的。但是在
Movie
不允许我在“管理”面板中单独显示可能的导入列表。问题在于向管理员显示可能的导入,而不是导入本身。我对您想要的内容进行了总结:一个新的模型类实现了一个外部的,可能是只读的“数据库”作为它的后端。我还设想您想将电影导入主数据库?在
Movie
类中有一个单独的
ImportManager
,在我看来更可能是您想要的-
Movie.import\u对象
或类似的东西。@ChrisMorgan,是的,这是我想做的。但是在
Movie
不允许我在“管理”面板中单独显示可能的导入列表。问题在于向“管理”显示可能的导入,而不是导入本身。谢谢,我已经阅读了manager上的文档,它们没有任何帮助,因为没有“数据库”事实上。我使用第三方服务来检索可能的导入列表。但确实存在一个数据库。看看这个,使用_的方法使用自定义查询来检索数据库信息。我想我不理解YouTunks,我已经阅读了manager上的文档,它们根本没有帮助,因为没有“数据库”事实上。我使用第三方服务来检索可能导入的列表。但确实存在一个数据库。看看这个,使用_的方法使用自定义查询来统计检索数据库信息。我想我不理解YouTunks,构建自定义视图变得简单多了。谢谢,构建自定义视图变得非常简单普勒。