【发布时间】:2011-07-05 01:51:07
【问题描述】:
我想在数据库中存储一些东西,并使用当前会话作为外键: 来自models.py
class Visited(models.Model):
session = models.ForeignKey(Session)
page = models.ForeignKey(Page)
times_visited = models.PositiveIntegerField()
ip_address = models.IPAddressField()
date_last_visited = models.DateTimeField()
def __unicode__(self):
return u'(%s, %s)' % (str(self.session.session_key), str(self.page.name))
要为此模型创建一个新条目,我使用以下内容来获取当前会话(在 views.py 中):
Session.objects.get(session_key=request.session.session_key)
但是,如果这是用户第一次访问该网站,因此还没有设置 cookie,上面的代码将产生 DoesNotExist 错误。
我知道即使现在设置了 cookie,您仍然可以设置会话对象。所以我可以想出一些技巧来完成这项工作,例如:
- 将唯一标识符设置为会话对象(除了会话密钥)
- 将我希望添加到数据库的数据临时存储为会话对象,并在使用会话之前使用装饰器函数检查它是否存在。
- 只使用会话对象而不在数据库中存储任何内容(这在技术上是可行的,但对于我的实现而言,它取决于 Python 字典 - 有几百个条目 - 至少与数据库一样高效,例如排序。)
但我想要一个更好的解决方案,我可以接受。这个问题有没有普遍使用或好的解决方案?还是我什至在我的模型中正确引用了会话?
感谢您的帮助。
【问题讨论】:
标签: django django-models django-sessions