假設我在django項目中有幾個不同的模型。現在我需要實現類似reddit的評分系統,可以很容易地添加到項目中的任何模型中。模式是這樣的:獨立模特關係
class Rating(models.Model):
vote = models.IntegerField(blank=False, null=False)
user = models.ForeignKey(User)
的問題是 - 如何將這種「抽象」模式連接到項目中的任何其他模式?
假設我在django項目中有幾個不同的模型。現在我需要實現類似reddit的評分系統,可以很容易地添加到項目中的任何模型中。模式是這樣的:獨立模特關係
class Rating(models.Model):
vote = models.IntegerField(blank=False, null=False)
user = models.ForeignKey(User)
的問題是 - 如何將這種「抽象」模式連接到項目中的任何其他模式?
你需要從內置contenttypes framework通用的關係。
首先(以及我對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