存储每个对象的用户特定数据

时间:2017-03-28 10:18:48

标签: django

如果您有一个存储文章的应用程序,并且每个文章都可以由用户评分。此评级对其他用户不可见,并且是特定于用户的(无总体评级),即需要为每个用户存储相同文章对象的每个评级。

目前我完成这个疯狂的事情:

class Article(models.Model):    
    text = models.TextField(null=True, blank=True)

    def __unicode__(self):
        return self.text


class UserArticleStorage(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,
                                on_delete=models.CASCADE,
                                null=True,
                                )

    articles_rated_1 = models.ManyToManyField(
        Article,
        related_name="articles_rated_1",
        blank=True
    )
    articles_rated_2 = models.ManyToManyField(
        Article,
        related_name="articles_rated_3",
        blank=True
    )
    articles_rated_3 = models.ManyToManyField(
        Article,
        related_name="articles_rated_3",
        blank=True
    )

我在视图中看到它们,例如request.user.userarticlestorage.articles_rated_3

将此用户特定评级存储为IntegerField的正常方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为你可以通过定义一个简单的模型来做到这一点:

class Rating(models.Model):
    article = models.ForeignKey(Article, ..., related_name='ratings')
    user = models.ForeignKey(settings.AUTH_USER_MODEL,, ..., related_name='ratings')
    rate = models.IntegerField()

然后通过以下方式访问评分:

request.user.ratings