DjangoのUserモデルを拡張する
投稿日:2006/08/01 02:40:53
過去の記事は移行時の問題により、画像が表示されなかったり、レイアウトが崩れたりしている可能性があります。
Tweet
前回、Djangoの認証機能を使って簡単なログイン・ログアウトを実装しました。
Djangoの認証機能は非常によくできているので、使わない手はないです。
現在、Userモデル(django.contrib.auth.model.py)に実装されているUserクラスは、
ユーザ名、名字、名前、メールアドレス、パスワード、最終ログインなどなどですが、
プロフィール的なもの(性別、生年月日、住所など)を持たせたい場合は、
どうしたらいいものかと調べていたら、そのままのサイトがありました。
The B-List: Django tips: extending the User model
リレーションを作るのがいいという話になっていて、この記事を書いた人は、
OneToOneFieldを使うと言ってるんですが、
コメントで、OneToOneFieldは今推奨されてない(今後変わる予定)から
ForeignKeyでも同じようにできるよってことになってたりしました。
個人的にもForeignKeyで実装しておいた方がよいかなー
と思ったのでそっちにしてみました。
[python]#vim: fileencoding=utf-8
#model.py
from django.db import models
from django.contrib.auth.models import User #Userクラスをインポート
#住所の選択項目
ADDRESS = (
(’Aichi’, ‘愛知’),
(’Tokyo’, ‘東京’),
)
class Profile(models.Model):
user = models.ForeignKey(User, unique=True, edit_inline=models.STACKED, num_in_admin=1,
min_num_in_admin=1, max_num_in_admin=1, num_extra_on_change=0) #Userクラスに対するリレーション
address = models.CharField(maxlength=10, choices=ADDRESS, core=True)
birthday = models.DateField()
def __str__(self):
return self.user.username[/python]
超シンプルなProfileクラスです。住所と生年月日をUserクラスにくっつけてます。
class Adminを使わないのは、User側の管理画面でプロフィールの編集をするためで、
edit_inline=models.STACKEDを使ってます。追加や編集の際に余分なフィールドが
表示されないように、オプションがいっぱいついてます。
[追記:2007/12/12 03:32]
core=Trueではまりました。
edit_inlineをつかった場合、他のフィールド(この場合addressとか)にcore=Trueを
つけないと保存したときにProfileクラス側のデータを削除したりします。
0.95ではエラーが出てたんですが、いつから出なくなったのかな
[/追記]
さらに、AUTH_PROFILE_MODULE = ‘profile.Profile’ #app名.クラス名を、
setting.pyに書くと以下のようなことができるようになります。
[python]from django.contrib.auth.models import User
u = User.objects.get(pk=1)
u.username #hfunaiを出力
u.email #hfunai[at]monospace.jpを出力
u.get_profile().address #Aichiを出力
u.get_profile().birthday #datetime.date(1979, 3, 30)を出力[/python]
get_profile()というメソッドを使えば、さっき作ったProfileクラスをimportしなくても
Userクラスから呼び出せます。これは何かと便利ですね。
- Posted at:
- 2006/08/01 02:40:53
- 13 Comments
- 0 TrackBacks
- Tags:
- Trackback:
- http://blog.monospace.jp/2006/08/01/django-extending-usermodel/trackback/
TrackBacks
まだ登録されていません。
Comments
RONCheext
こんにちは、非常に素晴らしいフォーラム!!!!!! <a href=http://google.com>:)</a>
private museum tours in St.Petersbsurg
IЎЇmは私がこのブログを観察したことを嬉しく思います。我々は信じられないほど頻繁に通過する最後に何かできないジャンク、 。ウェブサイトは愛情を込めてサービスと最新の状態に保存されています。だから、私たちとこれを共有していただき感謝、でなければなりません。
outdoor lighting manufacturers
今すぐあなたの新しいウェブページを得ているし、また、いくつかの売上を作る開始に熱心だ!しかし、あなたのWebサイトへの訪問者の過剰な量を持っていないために起こる場合、どのように販売をするのだろうか?
outdoor lighting manufacturers
あなたのウェブサイトの内容を本当に好きです!間違いなく、非常に有用なデータの美しい供給。公開を保持する上においてくださいと私はによって勉強を進めるつもりだ!乾杯。
appliance repair
私が面倒を発見する分に私をキャプチャするが、あなたのブログが異なっていることがブログを見つけることです。ブラボー。
металлоконструкции
私はいつも私に利益をもたらすことができるヒントについては、オンラインをinvstigatingしています。ありがとう!
buy anabolics online
私は本当にあなたがこのウェブサイトで書いている驚くべき提言のいくつかのためにあなたに感謝を言うために小さな発言を開発したいと思った。私のかなりのインターネットのルックアップ終了時に私のお客様で交換するための素晴らしい提案をして認識されている。私は、サイトの訪問者が実際に非常に有益な原則に非常に多くの優秀な人々と素晴らしいコミュニティに存在する非常に幸運であることを主張するだろう。私はあなたの全体のウェブページを使用しているために非常に幸運だと思うと、ここ読んで、より多くの輝かしい時代を楽しみにしています。おかげで再びすべての詳細については。
MaxEDD
私は間違いなくあなたがこのウェブサイト上でメールを出している素敵なヒントに感謝したいと迅速なコンセプトを実現することが望ま。私の時間のかかるインターネット上に表示されます現在、私の家族や友人と交換するために役立つ戦略で報われています。私は、我々の読者の事実が真に洞察力にポイントを持つ非常にいくつかの素晴らしい人々と役立つコミュニティに住むために祝福されていると主張するだろう。私は実際にウェブページを発見さには本当に感謝して、右のここ読んで、追加の楽しい瞬間を多くのために先に見える。良い取引は、物事の良い取引を再度ありがとう。
Наушники Sony
私のコンピュータは、私は、IMS上でビデオ通話を起動するたびにフリーズする? Ф
buy winstrol
これは、特にベテランの作家なら、本当にエキサイティングです。私は、フィードと結合し、またあなたの個人的な本当に素晴らしい書き込みアップを目の当たりに期待しています。同時に、私たちは、ソーシャルネットワーキングサイト内であなたのインターネットのサイトを共有している。
lighting wholesale
私は単純に前の私は本当に標準的な情報をあなたのゲスト上の人物の供給を享受することを示唆するようにWebサイトを離れて行くことができなかった?車のコソボをレンタル新しい記事を検査するために着実に戻ってになるだろう
Forex Success Formula
そこにこの記事の時点でいくつかの興味深い点がありますが、私はそれらのすべての中心に中心を見れば私は知らない。そこにいくつかの妥当性はありますが、私はさらにそれに見てまで、私は、ホールド意見がかかります。良い記事、ありがとうと私たちはもっと欲しい! FeedBurnerは同様に追加されますが、私はあなたを伝える必要があります。
数千のアカウントを強姦の上"には損失"と終了を約束しない、いわゆる"外国為替ボット"にお金を吹くの死に病気?最終的に自動操縦で完全に私専用の現金自動預け払い機にFX市場をオンに秘密を学ぶ...どのようなご経験に関係なく、これはあなたのために動作しません!
このユニークなサービスがあなたのアカウントに利益の塚を吸収しているときは、バハマでの休暇上に置くことができます!
で試してみてください forextradersreview.com ! <a href=http://forextradersreview.com>Trade of A Lifetime</a>
NatashaNag
ダウンロード方法 X-Rumer 7.0.10 Elite??
私はURLお願い与える!!!