我正在寫網站評級書,我不知道如何實現登錄用戶的投票系統。用戶應該能夠對1-10的書籍進行評分,當然,系統應該記住他的投票,計算所有選票並計算平均費率。投票系統的Django模型
可以說我有以下模型:
class Book(models.Model):
title = models.CharField(max_length=30)
author = models.ForeignField(Author)
#... other fields
和
class User(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=30)
#... other fields
現在,我可以添加率和rates_count領域的書,但我需要記住用戶投票。很顯然,我需要在圖書類多對多領域,我覺得這樣的事情應該罰款:
class Vote(models.Model):
user_who_voted = models.ForeignField(User)
rated_book = models.ForeignField(Book)
rate_date = models.DateField()
rate = models.ForeignField(User)
class Book(models.Model):
title = models.CharField(max_length=30)
author = models.ForeignField(Author)
votes = models.ManyToManyField(through='Vote')
#... other fields
我不知道如果我需要在圖書類率和rates_count。因爲我可以從Vote模型計算它們的值。這裏有幾個未知數:
有多快/慢數據庫引擎,比方說PostgreSQL,會計算所選書籍的平均費率,(增加和計算所有投票的投票數[平均費率=所有投票數/投票數]爲10000票,以及如何爲1000000票。手術時間是否持續增長?如果我的PC比服務器慢1000倍,是否需要進行計算也是線性的?
對不起,如果我的問題很愚蠢,但我沒有經驗的數據庫編程。謝謝你的回答。
如何'votes_on_books'表'ID'(Django給你這個), 'book_id'作爲書的外鍵,'voter_id'作爲用戶的外鍵,以及'rating'?然後,當您呈現圖書的頁面時,您可以嘗試獲取記錄,其中book_id =當前圖書和user_id =當前ID;一擊就意味着他們已經投了票,你不應該用投票界面來渲染這個頁面。您還可以輕鬆查詢當前圖書的所有選票或當前用戶的所有選票,而無需在表格上添加任何其他選項。 – chucksmash
謝謝@lamChuckB。我想這是最好的選擇。我的方法沒有'votes = models.ManyToManyField(through ='Vote')',但我認爲django使用這些信息來生成管理頁面(我不確定這一點),所以我會留在我的模型中。 – fenuks