2011-11-29 78 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