假设我在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