首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建模问题

建模问题
EN

Stack Overflow用户
提问于 2015-07-19 18:31:20
回答 1查看 108关注 0票数 1

当从传统的关系数据库转移到非关系数据库(如)时,如何正确地进行数据建模一直是个问题。

我已经读了很多次NDB的官方文件,并尝试了几个教程在互联网上,然而,我仍然被塞。

我正在开发一个财务应用程序,其中包含了我所有的个人支出。这意味着我设计了一个名为费用的实体,上面有一些属性。作为费用的一部分,我还设计了一个供应商实体来存储与商家相关的信息。

以下是实现:

代码语言:javascript
复制
class Expense(ndb.Model):
    amount = ndb.FloatProperty(required=False)
    description = ndb.StringProperty()
    vendor = ndb.KeyProperty(kind=Vendor)

class Vendor(ndb.Model):
    companyName = ndb.StringProperty(required=False)
    friendlyName = ndb.StringProperty(required=False, default="")

这是检索费用信息的代码:

代码语言:javascript
复制
def get(self):
    template_page = "expense.html"
    template_values = {'expense':Expense.query()}

    self.renderTemplatePage(template_page, template_values)

我在上面的设计中所面临的问题是如何收回费用和供应商信息,并将其传递给JINJA进行渲染。正如我所预期的那样,费用类中的Vendor属性只是一个键,而不是对象本身。因此JINJA无法理解{{expense.vendor.friendlyName}表达式。

虽然问题似乎是技术性的,但我相信我的差异与非关系数据库的概念和我应用于解决方案的类似传统的设计有关。

另一种选择是使用StructuredProperty而不是KeyPrperty。然而,一个解决方案要求是能够重命名一个供应商友好的名称,这应该会影响到所有的退出费用。去寻找每一个被构造的属性并发现这些变化是很疯狂的。

在放弃advice和转到之前,我想听听一些关于如何解决这个数据建模场景的建议。也许我需要构建的解决方案不推荐用于非关系数据库。

对此的任何支持。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-19 20:05:48

在模板中可以这样做:

代码语言:javascript
复制
{{ expense.vendor.get().friendlyName }}

也可以将属性添加到模型中:

代码语言:javascript
复制
class Expense(ndb.Model):
    amount = ndb.FloatProperty(required=False)
    description = ndb.StringProperty()
    vendor = ndb.KeyProperty(kind=Vendor)

    @property
    def vendor_name(self):
      return self.vendor.get().friendlyName

这将允许在模板中:

代码语言:javascript
复制
{{ expense.vendor_name }}

为了避免这种效率低下,您可以在显示费用列表之前获取供应商,在循环中调用get只是本地内存查找:

代码语言:javascript
复制
def get(self):
    template_page = "expense.html"
    expenses = Expense.query().fetch()
    ndb.get_multi([e.vendor for e in expenses])
    template_values = {'expense':expenses}

    self.renderTemplatePage(template_page, template_values)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31504541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档