新Admin Interface(・∀・)イイ!

現在、メール投稿を中心としたBlogを作ろうかと思ってます。
今日は、アカウントの部分を作ってみた。
本来なら、django.contrib.auth.models.Userを使って管理すればいいのですが

  • ハンドルネームをユーザ名とは別の名前にしたい。
  • 携帯・PCなど複数のメールアドレスから投稿したい。

などから今回はdjango.contrib.auth.models.Userを拡張します。


models.py

#-*- encoding:utf-8 -*-
from django.db import models
from django.contrib.auth.models import User

class Nickname(models.Model):
    user = models.ForeignKey(User)
    nickname = models.CharField(max_length=10)
    
    def __unicode__(self):
        return self.nickname
    
    def save(self):
        if not self.id:
            super(Nickname, self).save()

class Allowlist(models.Model):
    author = models.ForeignKey(Nickname)
    email = models.EmailField(unique=True)
    
    def __unicode__(self):
        return "%s (%s)" % (self.email, self.author)
    
    def save(self):
        if not self.id:
            super(Allowlist, self).save()

admin.py

#-*- encoding:utf-8 -*-

from django.contrib import admin
from accounts.models import *

class Email_Inline(admin.StackedInline):
    model = Allowlist
    extra = 2

class NicknameOption(admin.ModelAdmin):
    ordering = ['nickname',]
    inlines = [Email_Inline, ]

admin.site.register(Nickname, NicknameOption)

約40行くらい(設定等の部分は抜きますが)コーディングするだけで
以下のようなフォームを自動生成します!
以前のAdmin Interfaceではやる気は起きなかったな。うーん便利 ;-)
admininterface
admininterface posted by (C)常山


もっとdjango-registrationやdjango-profilesなども参考にしてみよう :-)