0

我目前正在使用 Python 在 AppEngine 上构建一个网站,并且我必须在数据存储中存储一些信息。

我所有的信息都分为三个不同的类别,如下所示:

1°/- 文章(主页新闻条目)。2°/- 产品(产品页面描述条目)。3°/- 导航(包含所有标题菜单条目)。

现在,我像这样存储它们:

from google.appengine.ext import db

class article(db.Model):

    title = db.StringProperty()
    body = db.TextProperty()
    author = db.StringProperty()
    aside = db.StringProperty()
    comment = db.StringProperty()
    date = db.DateProperty(auto_now_add=True)


class navigation(db.Model):

    title = db.StringProperty()
    comment = db.StringProperty()
    link = db.StringProperty()

class products(db.Model):

    title = db.StringProperty()
    body = db.TextProperty()
    author = db.StringProperty()
    aside = db.StringProperty()
    comment = db.StringProperty()
    date = db.DateProperty(auto_now_add=True)

我知道这没有优化,如您所见,我的产品类别与文章相同。我想我可以从第一篇文章中得到它,或者从第一篇文章中扩展它,但我不确定。

所以我的问题是:

我需要使用命名空间吗?(我想清楚地将文章与产品分开)。

这种数据存储的通常设计是什么?

我的文章正文属性永远不会超过 50 个单词,我该如何限制 stringProperty 范围?我是否必须在调用此属性期间进行设置,或者是否有任何选项可以设置 DB 类的默认方法?

提前非常感谢。

4

2 回答 2

1

如果我确实理解:作者可以撰写/评论一篇关于一个(只有一个?)具有描述和其他属性的产品的文章,所以我想我们应该有这样的东西

class products(db.Model):
    name_product = db.StringProperty()   # For Example
    description_product = db.StringProperty()   # For Example


class article(db.Model):
    my_product = db.ReferenceProperty(products, required=True)

    # Properties of the article
    title = db.StringProperty()   
    body = db.TextProperty()
    author = db.StringProperty()
    aside = db.StringProperty()
    comment = db.StringProperty()
    date = db.DateProperty(auto_now_add=True)

如果一篇文章涉及多个产品,那么您可以创建另一个数据库模型来映射文章和产品。由于可以在几篇文章中提到几种产品,我们将:

class products(db.Model):
    name_product = db.StringProperty()   # For Example
    description_product = db.StringProperty()   # For Example


class article(db.Model):
    # Properties of the article
    title = db.StringProperty()   
    body = db.TextProperty()
    author = db.StringProperty()
    aside = db.StringProperty()
    comment = db.StringProperty()
    date = db.DateProperty(auto_now_add=True)

class map_Article_Products(db.Model):
    my_article = db.ReferenceProperty(article, required=True)
    my_product = db.ReferenceProperty(products, required=True)

请注意,在这种情况下,数据库模型“文章”会发生变化

于 2012-08-31T10:06:37.190 回答
0

限制为 50 个字:创建您自己的 StringProperty 变体,在存储之前根据此限制进行验证。有关详细示例,请参阅https://developers.google.com/appengine/articles/extending_models

于 2012-08-31T20:36:22.043 回答