Django中的会话或模型字段?

时间:2015-03-13 19:28:17

标签: django session

我是Django的初学者。在开发应用程序时,我希望实现以下功能:在一个网页中有一些图片。用户可以喜欢'单击按钮后的图片。但是一个用户只能喜欢一次特定的图片。

现在有两种方法可以做到这一点。

1)在会话中设置属性。所以当用户点击一个按钮时,我可以检查他是否已经喜欢'根据本次会议,这个图片。

2)在我的用户模型中添加一个新字段,以记录他喜欢的图片'。

然后我不知道使用哪一个。我的问题如下:

  • 对于方法(1),会话可以在一段时间(例如2周)后过期。 因此对于在2周后重新访问我的网站的用户来说,这是真的吗? 我不能阻止他重新喜欢他已经喜欢过的照片。 之前?

  • 如果我想访问有关用户的哪些图片的信息 我喜欢',我只能使用方法(2)存储它 信息?

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果您希望“收藏夹”在多个会话中持续存在,那么是的,您需要将数据存储在不易变的地方。一个简单的解决方案是使用单独的模型,例如LikedPicture

class LikedPicture(models.Model):
    user = models.ForeignKey(User, db_index=True)
    picture = models.ForeignKey(Picture)

会话已过期?没问题,只需从模型中获取他们喜欢的那些。您可以更进一步并制作相关模型generic,这样您就不必创建单独的模型来保存每个关联,如果您有几个不同的模型,您将要进行类似的关联。

想要确保用户只收藏一次? Django用get_or_create()

让这个变得非常简单
favorited_picture, created = FavoritedPicture.objects.get_or_create(user=user,
    picture=picture, defaults={'user': user, 'picture': picture})

我发现这种方法比试图在模型上维护comma-separated-field以存储收藏的东西的ID更为直接。