0

こんにちは、次のコードがあります。feature_list = にさまざまな要素があります['spa','castle','country_house','coast','golf','boutique','civil','private_hire','city','gay']。データベースには値が1または0のいずれかです。そのため、それらが1であるかどうかを確認し、それらを新しい配列に追加しようとしています。

try:
        hotel_main = models.Hotel.objects.get(slug=slug)
    except models.Hotel.DoesNotExist:
        try:
            hotel_main = models.Hotel.objects.get(id=id)
        except models.Hotel.DoesNotExist:
            raise Http404
    feature_list = ['spa','castle','country_house','coast','golf','boutique','civil','private_hire','city','gay']
    hotel_features = []
    for feature in feature_list: 
        if hotel_main.feature == 1: 
            hotel_features.append(feature)  

次のエラーが表示されます:「ホテル」オブジェクトには属性「機能」がありません

しかし、私の理解では、機能は配列の文字列を表す必要があります...私を修正してください

4

2 に答える 2

0

しかし、私の理解では、機能は配列の文字列を表す必要があります...私を修正してください

配列からの文字列が に割り当てられていることは正しいですがfeature、問題は の呼び出しにありhotel_main.featureます。Python は、hotel_main オブジェクトで「feature」という名前の属性を探していると判断します。変数に現在割り当てられているものを使用して属性を探すには、Python の組み込み関数 getattrを使用する必要があります。

feature_value = getattr(hotel_main, feature, 0) //default to not having the feature
if feature_value == 1:
    // the rest of your code
于 2012-09-17T13:00:43.123 に答える
0

あなたがしていることは間違っています。これを試して -

hotel_main = models.Hotel.objects.get(slug=slug)
feature_list = ['spa','castle','country_house','coast','golf','boutique','civil','private_hire','city','gay']
hotel_features = []
for feature in feature_list: 
    if getattr(hotel_main, feature, 1):
        hotel_features.append(feature)

あなたがやっていることで例外が発生する理由は、hotel_main オブジェクトで列フィールドを動的にチェックしているためです。文字列リテラルでは.機能しないと思います。したがって、の導入getattr

お役に立てれば...

于 2012-09-17T12:27:04.743 に答える