区块链技术博客
www.b2bchain.cn

有什么方法可以将Django模型用作接口吗? – python程序员分享

本文介绍了有什么方法可以将Django模型用作接口吗? – python程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我有许多子类的基类,并且子类中唯一发生变化的是某种方法(模板模式)。但是我被卡住了,无法正常工作。

class Base(models.Model):     _value = models.CharField(max_length=200)     _name = models.CharField(max_length=200)     user = models.ForeignKey(User, related_name="some_set")      #used as a property     def value():         def fget(self):             self.refresh()             return self._value      def refresh(self):         raise NotImplementedError("..")  class Subclass1(Base):     def refresh(self):         self._value = some_val  class Subclass2(Base):     def refresh(self):         self._value = some_other_val 

我希望能够将整个相关集视为相同的实体,并在每个实体上调用value属性,每个实体都遵循其自己的刷新实现版本,即

for x in user.some_set.all():     print x.value 

但是目前看来,即使在超类中删除了刷新,这似乎也是不可能的。我还考虑过使用策略模式并使用ForeignKey关系来调用该方法,但是我仍然必须在ForeignKey中有一个基类,这些子类是从该基类派生的。

python大神给出的解决方案

使用Proxy Models

从文档

但是,有时您只想更改模型的Python行为–可能更改默认管理器或添加新方法。

这就是代理模型继承的目的:为原始模型创建代理。您可以创建,删除和更新代理模型的实例,所有数据将像使用原始(非代理)模型一样被保存。区别在于您可以更改诸如默认模型排序或代理中的默认管理器之类的内容,而无需更改原始文件。

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 有什么方法可以将Django模型用作接口吗? – python程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们