データベースにいくつかのものを保存したいのですが、現在のセッションを外部キーとして使用しています: 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 辞書に依存し、少なくとも並べ替えなどのデータベースと同じくらい効率的です)。
しかし、私は一緒に暮らすことができるより良い解決策が欲しい. この問題に対して一般的に使用されている、または適切な解決策はありますか? または、モデルでセッションを適切に参照していますか?
ご協力ありがとうございました。