0

現在、Python を使用して AppEngine で Web サイトを構築しており、データストアにいくつかの情報を保存する必要があります。

私のすべての情報は、次のように 3 つの異なるカテゴリに分かれています。

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)

これが最適化されていないことはわかっています。ご覧のとおり、私の製品クラスは記事と同じです。記事1から派生させるか、拡張できると思いますが、よくわかりません。

だから私の質問は:

名前空間を使用する必要がありますか? (記事と商品を明確に分けたい)。

その種のデータストレージの通常の設計は何ですか?

記事本文のプロパティは 50 語を超える必要はありませんが、stringProperty の範囲を制限するにはどうすればよいですか? このプロパティへの呼び出し中に設定する必要がありますか、または DB クラスのデフォルト メソッドに設定するオプションはありますか?

よろしくお願いします。

4

2 に答える 2

1

もし私が理解していれば: 著者は、説明やその他のプロパティを持つ 1 つ (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)

1 つの記事が複数の製品に関係する場合、記事と製品をマッピングするために別のデータベース モデルを作成できます。複数の記事で複数の製品について言及できるため、次のようになります。

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)

この場合、db モデルの「記事」が変更されることに注意してください。

于 2012-08-31T10:06:37.190 に答える
0

50 語の制限まで: StringProperty の独自のバリアントを作成し、保存する前にこの制限に対して検証します。詳細な例については、https://developers.google.com/appengine/articles/extending_modelsを参照してください。

于 2012-08-31T20:36:22.043 に答える