0

MongoDB、pymongo、および Bottle を使用して請求書データを管理する Web アプリケーションを作成しています。現在、データベースへの挿入とデータベースからの読み取りを処理するために作成されたクラスで、特定のドキュメントの各要素を読み取る関数と、html フォームからの入力に基づいて新しいドキュメントを挿入する関数を作成しました。

#This function will handle the finding of orders
    def find_names(self):
        l = []
        for each_name in self.myorders.find():
            l.append({'_id':each_name['_id'], 'quote':each_name['quote'],'name': each_name['name'], 'item': each_name['item'], 'qty': each_name['qty'], 'color': each_name['color'], 'phone': each_name['phone'], 'email':each_name['email']})
        return l

#This function will handle the insertion of orders
    def insert_name(self, newname, newitem, newqty, newcolor, newphone, newemail, newquote):
        creationTime = datetime.datetime.now()
        newname = {'name':newname, 'created' :creationTime, 'item' :newitem, 'qty':newqty, 'color':newcolor, 'phone':newphone, 'email' :newemail, 'quote' :newquote}
        _id = self.myorders.insert(newname)
        return _id

ただし、html ページでは、複数のアイテムを含む注文に対応するために、複数のアイテム、数量、および色を受け入れることができます。ユーザーが入力する数を事前に知らずに、関数を更新して可変数のパラメーターを含めるベスト プラクティスを知りたかったのです。追加の各アイテムには item# というラベルが付けられ、「#」は注文の挿入されたアイテムの番号に置き換えられます。たとえば、挿入された 6 番目のアイテム (0 から始まる) は item5 になります。入力の数量フィールドと色フィールドについても同じことが言えます。最初に考えたのは、各項目を個別に挿入するのではなく、項目のリストをドキュメントに挿入することでしたが、これを実行する最善の方法がわかりませんでした。

4

1 に答える 1

1

(辞書の)リストを取るだけです:

def insert_names(self, names):
    # `names` is a list of dicts

    inserted_ids = []

    for name in names:
        name['created'] = datetime.datetime.now()
        _id = self.myorders.insert(name)
        inserted_ids.append(_id)

    return inserted_ids

HTMLフォームから生成したリストでinsert_namesを呼び出します。

names = [
    {'name': name0, 'qty': qty0, ...}
    {'name': name1, 'qty': qty1, ...}
    {'name': name2, 'qty': qty2, ...}
    ...
]
insert_names(names)
于 2013-07-22T21:22:05.277 に答える