使用Django模型系统进行评级

时间:2017-06-30 23:07:21

标签: python django database

class User(models.Model):
    username = models.CharField(max_length=150)
    email = models.EmailField(max_length=150)

class Recipes(models.Model):
    title = models.CharField(max_length=150)
    user = models.ForeignKey(User, related_name='user', on_delete=models.CASCADE, null=True)
    created = models.DateTimeField(auto_now=True, auto_now_add=False)
    updated = models.DateTimeField(auto_now=False, auto_now_add=True)

class FavoriteRecipes(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    recipe = models.ForeignKey(Recipes, on_delete=models.CASCADE, null=True)

class FavoriteChef(models.Model): 
    user = models.ForeignKey(User, related_name='user', on_delete=models.CASCADE)
    favorite = models.ForeignKey(User, related_name='favorite', on_delete=models.CASCADE)

我正在尝试为食谱和用户创建评级系统。我不确定这是否是最佳方法,但他是我的问题:

  1. 我如何计算不同用户喜欢的食谱,例如:

    • 用户1喜欢食谱1
    • 用户2喜欢食谱1
    • 食谱1由2个谎言。
  2. 如何使用这种方法限制用户投票,因为django会生成自己的pk条目,因为它可以存在:

    • pk:1位用户1喜欢食谱1

    • pk:2位用户1喜欢食谱1

  3. 并谢谢

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式限制投票数:

if FavoriteRecipes.objects.filter(recipe=Recipes, user=User).exists():
  #do not update
else:
    #save vote

然后你可以用以下方式计算选票:

count= FavoriteRecipes.objects.filter(recipe=Recipe).count()