2011-02-10 3 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

Потенциальная проблема с направлением, которое вы принимаете, заключается в том, что вы сохраняете только один набор рейтингов для каждого листинга. Если пользователь B хочет оценить листинг, ему придется перезаписать оценки пользователя A. Вместо того, чтобы размещать рейтинги внутри листинга, вам нужно разбить свои рейтинги в отдельной таблице рейтингов и использовать отношения ManytoMany между вашими листингами и рейтингами. Таким образом, вы можете использовать несколько пользователей для определенного списка, а затем вы можете рассчитать и показать средние значения для каждого листинга. См. this discussion для справки.

Возможно, лучше использовать существующее приложение рейтингов, чем начинать с нуля. У них уже есть документация, поэтому вы можете быстро их запустить и запустить, и они обрабатывают дизайн базы данных для вас.

Django Ratings

Django Valuate

+0

Оценка, скажем, квартиры должна быть оценена только один раз. Полагаю, я мог бы создать отдельный класс и использовать ForeignKey вместо ManyToMany? Теперь отображаются модели DecimalField. Я выбрал опцию выбора. Он отображается как 3.50 и т. Д. Теперь мне просто нужно преобразовать это в звезды. – AAA

Смежные вопросы