2011-11-29 40 views
0

假設我在django項目中有幾個不同的模型。現在我需要實現類似reddit的評分系統,可以很容易地添加到項目中的任何模型中。模式是這樣的:獨立模特關係

class Rating(models.Model): 

    vote = models.IntegerField(blank=False, null=False) 
    user = models.ForeignKey(User) 

的問題是 - 如何將這種「抽象」模式連接到項目中的任何其他模式?

回答

1

首先(以及我對Reddits評分系統一無所知的免責聲明),除非您希望用戶將負數百萬的評級放到正數百萬,爲什麼不使用choices

現在要解決的問題是:一個可評級的模型應該具有允許對一個模型進行多次評級的關係。不幸的是,這意味着Django中的任何關係字段都不會起作用。最簡單的解決方法是在實際模型中獲得評分。

如果你不想複製粘貼的評級字段,你可以使用抽象模型,並繼承來自:

class RateableModel(models.Model): 
    rating  = models.Integerfield(...) 
    rating_user = models.ForeignKey(User) 

    class Meta: 
     abstract = True 

class SomeModelThatCanBeRated(RateableModel): 
    # Fields for this model