2017-02-13 1 views
0

私のデータベースにクエリを出し、コレクションレビューを選択します。フィルタリング、整理、グループ化、並べ替え、クエリからの結果の制限が必要です。Django - Mongoengine Group By + Where + Sort +結果を制限して印刷する

クエリはviews.pyにあります。それはうまく動作しますが、私はhtmlファイルのコンテキスト変数 "best_hotels"の内容を印刷するのに問題があります。ここで

from __future__ import unicode_literals 
from django.db import models 
from mongoengine import * 

class Reviews(Document): 
    # _id = IntField(primary_key=True) 
    content_lenght = IntField() 
    title_score = IntField() 
    content_eval = StringField() 
    review_stars = FloatField() 
    hotel_name = StringField() 
    review_score = IntField() 
    city = StringField() 
    helpful_reader = IntField() 
    title = StringField() 
    content_score = IntField() 
    stars_eval = StringField() 
    content = StringField() 
    title_eval = StringField() 
    review_eval = StringField() 

views.pyは、彼女がreviews.htmlここ

... 
    <h2>The 10 best hotels with the most positiv ratings</h2> 
    <ul> 
    {% for row in best_hotels %} 
     <li>Name: {{ row.id }} - {{ row.sum }} positiv ratings</li> 
    {% endfor %} 
    </ul> 
... 

HTMLの結果

The 10 best hotels with the most positiv ratings 

Name: - 678 positiv Ratings 
Name: - 387 positiv Ratings 
Name: - 364 positiv Ratings 
Name: - 305 positiv Ratings 
Name: - 292 positiv Ratings 
Name: - 269 positiv Ratings 
Name: - 267 positiv Ratings 
Name: - 224 positiv Ratings 
Name: - 219 positiv Ratings 
Name: - 181 positiv Ratings 

ホテルの名前です

from el_pagination.decorators import page_templates 
from django.shortcuts import render 
from django.http import HttpResponse 
from models import Reviews, Evaluation 

def reviews(request): 

    best_hotels = Reviews.objects.aggregate(
     { 
      "$match": {"review_eval": "positiv"} 
     }, 
     { 
      "$group" : {"_id" : "$hotel_name", "sum" : { "$sum" : 1 } } 
     }, 
     { 
      "$sort" : {"sum" : -1} 
     }, 
     { 
      "$limit": 10 
     } 
    ) 
    context = { 
    'best_hotels' : best_hotels 
    } 
    return render(request, 'review/reviews.html', context) 

です不足している。どうして?

ホテルの名前が存在するかどうかを確認するためにhtmlファイルを変更しました。ここでは新しいものである:

<h2>The 10 best hotels with the most positiv ratings</h2> 
<ul> 
{% for row in best_hotels %} 
    <li>{{ row}}</li> 
{% endfor %} 
</ul> 

ここでは、hotelnamesがあることがわかります新しいHTMLファイルの結果

ここ
{u'sum': 678, u'_id': u' Steigenberger Airport Hotel '} 
{u'sum': 387, u'_id': u' Steigenberger Frankfurter Hof '} 
{u'sum': 364, u'_id': u' Sheraton Frankfurt Airport Hotel & Conference Center '} 
{u'sum': 305, u'_id': u' Wyndham Grand Frankfurt '} 
{u'sum': 292, u'_id': u' Innside by Meli\xe1 Frankfurt Niederrad '} 
{u'sum': 269, u'_id': u' Innside by Meli\xe1 Frankfurt Eurotheum '} 
{u'sum': 267, u'_id': u' Hilton Garden Inn Frankfurt Airport '} 
{u'sum': 224, u'_id': u" 25hours Hotel by Levi's "} 
{u'sum': 219, u'_id': u' 25hours Hotel The Goldman '} 
{u'sum': 181, u'_id': u' The Westin Grand Frankfurt '} 

です。しかし、なぜ最初のhtmlファイルにはありませんか?

答えて

0

最初のhtmlファイルに名前をどこに印刷するのか分かりません。 liタグ内に{{row.name}}のような要素はありません。

+0

ホテルの名前は{{row.id}}変数 –

+0

にある可能性があります。その理由はおそらく_idであり、idではないからです。 – Aayushi

+0

変数と属性は、下線で始まることはできません。 {{row._id}}や{{_id}}は使用できません –