MongoEngine / MongoEngine/mongoengine

Fill _instance when adding an embedded document to a list

オープン
#1,925 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Python
スター
4.3k
フォーク
1.2k
平均マージ
4時間 41分
マージ済み PR(30日)
11

説明

EmbeddedDocument._instance is not filled when the embedded document as added to a document's list of embedded docs:
https://github.com/MongoEngine/mongoengine/commit/7d90aa76ff7116269dea42f2c6629ea6b868b0de#diff-da780e321f79f4602bab26240c7b0d7dR87

ipdb> l
    136         benefit = PurchaseBenefit()
    137         coupon.benefits.append(benefit)
    138         # HACK: force MongoEngine to fill _instance
    139         import ipdb; ipdb.set_trace()
--> 140         coupon.benefits[0]
    141     form = PurchaseBenefitForm(request.form if request.method == 'POST' else None, obj=benefit)
    142     errors = []
    143     if request.method == 'POST' and form.validate():

ipdb> isinstance(benefit, mongoengine.EmbeddedDocument)
True
ipdb> benefit._instance
ipdb> n
> /Users/Vic/projects/brain2/brain/crm/coupons.py(141)edit_coupon_benefit()
    140         coupon.benefits[0]
--> 141     form = PurchaseBenefitForm(request.form if request.method == 'POST' else None, obj=benefit)
    142     errors = []

ipdb> benefit._instance
Coupon(id='5b915f6a2ac6b371ed8f21df', ...)
ipdb>

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

参照されているコミットから始め、特に87行目付近にリンクされたdiffを確認して、issueに示されているappend sequenceを再現してください。親リストに追加する前後のEmbeddedDocumentの動作を確認してください。完了条件は、appendの直後に_instanceが設定され、そのケースを対象とするregression testがあることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
mongodb, python
領域
databases
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。