Я хочу сохранить некоторые вещи в базе данных и использую текущий сеанс как внешний ключ: from 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 - с несколькими сотнями записей - как минимум так же эффективно, как база данных для таких вещей, как сортировка.)
Но я хотел бы получить лучшее решение, с которым я смогу жить. Есть ли вообще используемые или хорошие решения этой проблемы? Или я даже правильно ссылаюсь на сеансы в моей модели?
Благодарим вас за помощь.