0

少しの助けを得ることを望んでいる長い一日でした:)

私はweb2pyで検索フォームを開発しています。このようなフォームを作成します

<table>    
<form method="post" action="{{=URL('views', 'search')}}">
    <tr><td><label>Enter Keywords</label></td><td><input style="background-color: lightgreen; color:#333; font-weight:bold; width:260px;" type="text" name="tags"></td>
        </tr>
        <tr>
        <td>
        <label>Select Region</label>
            </td>
            <td>
                <select name="region" style="width:260px">
    <option value="" style="background-color: darkgreen; color:#FEFEFE; font-weight:bold; width:260px;">Choose a Region...

    {{for region in region_query:}}
    <option value="{{=region.id}}" style="background-color: lightgreen; color:#333; font-weight:bold; width:260px;">{{=region.title}}</option>
    {{pass}}
    </select>
    </td>
    </tr>
    <tr>
            <td>
        <label>Select Category</label>
            </td>
    <td>

    <select name="category" style="width:260px;">

    <option value="" style="background-color: darkgreen; color:#FEFEFE; font-weight:bold; width:260px;">Choose a Category
    {{for cat in cat_query:}}
    <optgroup label="{{=cat.title}}" style="background-color: darkgreen; color:#FEFEFE; font-weight:bold; width:260px;">
    {{sub_query = db(db.sub_category.main_category == cat.id).select(orderby=db.sub_category.title)}}
    </optgroup>
    {{for sub in sub_query:}}
    <option value="{{=sub.id}}" style="background-color: lightgreen; color:#333; width:260px;">{{=sub.title}}</option>

    {{pass}}
    {{pass}}
    </select>



    </td>
    </tr>
    <tr>
<td colspan="2" align="right">
    <input type="submit" style="background-color: lightgreen; color:#333; font-weight:bold; width:260px; height:30px" value="Search Business Directory">
    </td>
    </tr>
</form>
</table>

私のコントローラーはこれで構成されています

def search():
    mystr = str(request.post_vars["tags"])
    if mystr == "" or mystr == None:
        return redirect(URL('default', 'error_search'))
    region = str(request.post_vars["region"])
    if region == "" or region == None:
        return redirect(URL('default', 'error_search'))
    category = str(request.post_vars["category"])
    if category == "" or mystr == None:
        return redirect(URL('default', 'error_search'))
    featured = db((db.featured_listing.tag_words.like('%'+mystr+'%')) | (db.listing.region.contains(region)) | (db.listing.sub_category.contains(category))).select(orderby=db.featured_listing.title)
    query = (db.listing.tag_words.like('%'+mystr+'%')) | (db.listing.region.contains(region)) | (db.listing.sub_category.contains(category))
    orderby = db.listing.title
    pcache = (cache.ram, 15)
    paginate = Pagination(db, query, orderby, display_count=10, cache=pcache, r=request, res=response)
    search_query = paginate.get_set(set_links=True)
    return dict(search_query=search_query, featured=featured)

結果の検索の私のビューにはこれが含まれています

{{for query2 in featured:}}                                                                        

    <div class="listingItem">
    <div class="listingItem-content">
        <h2>{{=query2.title}}</h2>
    ....

などなど

検索するとこのエラーが表示されます

Traceback (most recent call last):
  File "/var/www/web2py/gluon/restricted.py", line 212, in restricted
    exec ccode in environment
  File "/var/www/web2py/applications/GreenPages_web/views/views/search.html", line 47, in <module>
AttributeError: 'Row' object has no attribute 'title'

これを修正して、探している結果を達成する方法を教えてください。

与えられたアドバイスに感謝します。

4

1 に答える 1

0
featured = db((db.featured_listing.tag_words.like('%'+mystr+'%')) |
    (db.listing.region.contains(region)) |
    (db.listing.sub_category.contains(category))).select(orderby=db.featured_listing.title)

上記のクエリは、2 つの異なるテーブル (db.featured_listingおよびdb.listing) を参照しています。したがって、結果には両方のテーブルのフィールドが含まれるため、テーブル名とフィールド名の両方を使用して各レコードのフィールドを参照する必要があります。「タイトル」フィールドがテーブルにある場合は、ではなくdb.featured_listing経由で参照する必要があります。query2.featured_listing.titlequery2.title

クエリは 2 つのテーブルを参照していますが、結合は含まれていないため、このクエリは期待どおりに返されない可能性があることに注意してください。

http://web2py.com/books/default/chapter/29/06#Inner-joinsを参照してください。

于 2013-01-27T17:15:25.670 に答える