0

私はこのクラスを持っています:

class Contract(db.Model):
    book_number = db.IntegerProperty(required = True)
    initial_page = db.IntegerProperty(required = True)
    final_page = db.IntegerProperty(required = True)
    contract_type = db.StringProperty(required = True)
    parties = db.ListProperty(int)
    date = db.DateTimeProperty (required = True, auto_now = True, auto_now_add = True)

class ContractingParty(db.Model):
    person = db.ReferenceProperty(Person, required=True, collection_name="party_to_contracts")
    contract = db.ReferenceProperty(Contract, required=True)
    condition = db.StringProperty()

このコードを使用して、プロパティが空のリストであるContractという名前のエンティティを作成します。parties

    parties = []
    contract_record = Contract(book_number = int(numBook),
                               initial_page = int(numInitialPage),
                               final_page = int(numFinalPage),
                               contract_type = choosed_contract_type,
                               parties = parties)
    contract_record.put()

しかし、partiesプロパティに ContractingPerson エンティティの ID を設定する必要があります。したがって、コードの他の部分では、エンティティのpartiesプロパティを次のように更新します。Contract

contracting_party_record = ContractingParty(person = person_key,
                                                      contract = contract_key,
                                                      condition = get_condition)
contracting_party_record.put()
contracting_party_id = contracting_party_record.key().id()
contract = Contract.get_by_id(contract_id)
contract.parties.append(contracting_party_id)
#contract.parties.extend(contracting_party_id)
contract.put()

しかし、データストアにクエリを実行すると、次のようになります。

parties = db.GqlQuery("SELECT * FROM ContractingParty WHERE contract =:c_key", c_key = contract_key).fetch(20)

作成した最後の ContractingParty エンティティのみを取得しました。contract.parties.append(contracting_party_id)古いリストを新しいリストに置き換えているようです。では、使ってみましたcontract.parties.extend(contracting_party_id)。しかし、今、私はこのエラーを得ました:

File "C:\Users\Py\Desktop\contract\main.py", line 363, in post
    contract.parties.extend(contracting_party_id)
TypeError: 'long' object is not iterable

それを修正する方法は?

4

1 に答える 1

2

contract.parties.append(contracting_party_id) のようなリストにアイテムを追加しても、以前のリストは置き換えられません。あなたの場合もそうすべきではありません。

あなたがしたいのは、appendの代わりに使用することですextend

extend別のリストのような iterable を期待しながらappend、リストに項目を追加します。

>>> l = [1,2,3]
>>> l.append(4)
>>> l
[1, 2, 3, 4] 

>>> l = [1,2,3]
>>> l.extend([4,5,6])
>>> l
[1, 2, 3, 4, 5, 6]
>>> 

ここにドキュメント:http://docs.python.org/tutorial/datastructures.html

于 2012-08-09T18:34:24.077 に答える