2011-02-10 19 views
1

私は家の品質を評価できる評価システムが必要なプロジェクトに取り組んでいます。彼らは管理パネルからやっているので、訪問者が評価するものではありません。Djangoの評価システム

例えば、各リストのために、彼らは1-5星からそれを評価することができます: 場所: ルーム: 食事: コミュニティ: 全体:

を私のmodels.pyファイルでは、私が持っていますこの設定:

Class Listing (models.Model): 

... 

    RATING_CHOICES = (
     (1, 1), 
     (2, 2), 
     (3, 3), 
     (4, 4), 
     (5, 5), 
    ) 
    location_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    room_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    dining_options_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    community_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    recreation_rooms_rating = models.DecimalField(choices = RATING_CHOICES, max_digits=3, decimal_places=2) 
    def __unicode__(self): 
     return self.name 

    def get_avg_rating(self): 
     avg_rating = (self.location_rating + self.room_rating + self.recreation_rooms_rating + self.dining_options_rating + self.community_rating)/5 
     return avg_rating 

ちょっとしたCSSで評価を表示する予定です。 room_ratingやavg_ratingをテンプレートタグに入れても機能しないので、views.pyにいくつかのコード行を追加する必要があると仮定しています。私はDjangoのドキュメントをチェックしましたが、これについてどうやって行くのかまだ分かりません。

これはやりやすいはずですが、どこから始めたらいいかわかりません。

+0

属性は、彼らがにしているオブジェクトからアクセスする必要があります。彼らはまた存在する必要があります。 –

答えて

1

あなたが取っている方向の潜在的な問題は、各リスティングに対して1セットの評価しか保存していないことです。ユーザーBがリスティングを評価したい場合、ユーザーAの評価を上書きする必要があります。リストの中に格付けを入れるのではなく、格付けを別の格付け表に分解し、リストと格付けの間にManytoMany関係を使用する必要があります。こうすることで、複数のユーザーに特定のリスティングを評価させ、各リスティングの平均を計算して表示することができます。参考までにthis discussionを参照してください。

ゼロから始めるよりも既存の評価アプリを使用する方がよい場合があります。彼らはすでにドキュメンテーションを手に入れているので、素早く起動して実行することができ、データベース設計を手がけます。オブジェクトの

Django Ratings

Django Valuate

+0

アパートメントの評価は一度のみ評価する必要があります。私は別のクラスを作成し、ManyToManyの代わりにForeignKeyを使うことができると思いますか? models.DecimalFieldが表示されています。選択肢のオプションを取り出しました。これは3.50などと表示されています。今ではそれを星に変換するだけです。 – AAA