2011-01-03 10 views
4

私はDjangoのアプリでシンプルPostモデルを持っている:Djangoにニックネームのある匿名ユーザーを格納するためのエレガントな方法ですか?

class Post(models.Model): 
    category = models.CharField(max_length=10, choices=choices) 
    message = models.CharField(max_length=500) 
    user = models.ForeignKey(User, editable=False) 

私は、匿名ユーザーがニック名で記事を作成したの機能を実装したいと思います。残念ながら、djangoでは、AnonymousUserのインスタンスをPostクラスの外部キーとして保存することはできません。

私は、ユーザーがいないすべての投稿に使用される匿名ユーザー(id = 0、または可能であれば負の数)を表すdbに「ダミー」ユーザーレコードを追加することを検討していました。それが存在する場合は、匿名ユーザーのニックネームを表すために、null可能な名前フィールドが使用されます。

この解決法は私にはちょっとハッキリです。よりクリーンなソリューションがありますか?

答えて

6

新しいユーザーをセッション情報で識別できる場合は、普通のユーザーアカウントpro formaを作成するだけで、話すことができます(揮発性と見なすフラグが付いています)。

セッションの有効期間中にユーザーが実際に登録したい場合は、ユーザーアカウントを自分の側で再利用することができ、ユーザーは自分のすべてのデータを自分のアカウントに保存できます。

@slacyがコメントし、@Dominiqueが回答しました。自分のものを転がす代わりに、既存のプロジェクトを見てみましょう。これは:

+0

これはdjango-lazysignupが使用するのと同じアプローチであり、独自のものを使用する代わりにその方法を使用することをお勧めします。注意してください。あなたはカジュアルなユーザー、クローラー、および他のあらゆる種類のランダムなものを持ち、決して消えないユーザーアカウントを作成するためです。 django-lazysingupはそれをうまく処理します。 – slacy

0

あなたはUserForeignKeyblank=Truenull=Trueを追加し、ユーザーが匿名の場合、Noneに設定することができます。ニックネームはどこかに保存するだけです。

+0

ユーザーがnullになると、まだ結合を実行できますか? – TheOne

0

私はジャンゴに新たにしています。 1人の友人がForeignKeyを使わないように教えてくれて、CharFieldを使ってもOKです。 ForeignKeyはCharFieldよりもゆっくりで、ユーザー情報のチェックがいくつかあります。

関連する問題