3

有谁可以告诉我是否可以创建一个模型类,其中一些模型字段和一些其他字段从外部数据源获取数据。关键是我希望这个模型能够以与 ModelForm 的另一个模型相同的方式被利用。我的意思是,如果我通过指定获取特殊字段(可能未链接到数据库中的数据的那些)数据的操作来重新定义模型的“对象”管理器,那么 modelForm 是否会将输入与未附加到的字段链接到数据库?关于相关对象的类似问题。如果我有一个与该特殊模型有关系的模型,我是否可以通过经典方式获取此模型实例来获取相关对象(具有经典模型字段和非数据库字段)?

如果我不清楚,请告诉我,我会重新制定。

谢谢。

编辑:我尝试使用自定义字段创建模型,然后覆盖默认管理器及其功能:所有,获取,... 以获取对象,就像使用经典模型和管理器一样,它可以工作。但是,我不使用 QuerySet,似乎获得 ModelForm、相关对象和管理功能的唯一方法是正确构建 QuerySet 并让它由经理返回。这就是为什么现在我想知道是否可以使用从外部来源获得的数据正确地手动构建一个 QuerySet,或者告诉 django-admin、模型表单和相关对象来处理这个模型上的另一个类而不是查询集。

谢谢

4

2 回答 2

1

方法是定义自定义方法

在模型上定义自定义方法以向您的对象添加自定义“行级”功能。尽管 Manager 方法旨在做“表范围”的事情,但模型方法应该作用于特定的模型实例。

这是一种将业务逻辑保存在一个地方——模型中的有价值的技术。

于 2012-11-12T22:45:03.360 回答
0

我现在有一个部分解决方案。我重写了 Manager,尤其是它的 all() 和 get() 函数(因为我现在只需要这些函数)。all() 返回一个查询集,我在其中添加了一些逻辑的结果,这些逻辑为我提供了从外部数据构建的对象(在我的例子中是通过 xmlrpc 获取的)。我通过 _result_cache 属性将这些对象添加到 qs 中。我认为它不干净,事实上我的模型现在是一个自定义模型,我没有任何数据库字段。我可以用它来填充数据库模型......但是我可以像经典模型一样使用它:例如 MyModel.objects.all()。

如果有人有其他想法,我将不胜感激。

问候

于 2012-11-15T14:03:47.823 回答