ちょっとした覚え書き
書いておかないと忘れそうなのでメモ。Django 0.96 用。
Apache での認証に Django のユーザデータベースを使う
http://michilu.com/django/doc-ja/apache_auth/
できなかった。入力してもパスしない。
やりたいのは、 Subversion と trac の認証を Django で一元管理すること。
Django も Active Directory に認証を任せているので、まあいいんだけど。
newforms を使った既存オブジェクトの変更
obj = Sample.objects.get(pk=id) cls_form = forms.form_for_instance(obj) form = cls_form(request.POST.copy()) #これ重要 if not form.erros: form.save()
form生成時にPOSTデータを渡しておかないと、変更のつもりが追加になる。
気付いてみれば当たり前だけど、ajaxで非同期にデータを追加してると気付かなかった。
settings.py のちょっといい書き方
settings_local を使った設定の切り分けもいいけれど、個人的にはこっちが衝撃的だった。
REVIEWBOARD_ROOT = os.path.abspath(os.path.split(__file__)[0])
python使いには当たり前なのか?
今はこれを応用して、ソースをどこに置いてもいい感じにしている。
デフォルトでこうなっていてほしいくらい。
import os PROJECT_ROOT = os.path.abspath(os.path.split(__file__)[0]) DATABASE_ENGINE = 'sqlite3' DATABASE_NAME = os.path.join(PROJECT_ROOT, 'db/djangoproject.db') TEMPLATE_DIRS = ( os.path.join(PROJECT_ROOT, 'templates') )
違うテーブルのフィールドでソートするには
別のテーブルのフィールド値で整列させる場合,テーブル名をドット表記で指定します:
http://michilu.com/django/doc-ja/db-api/#order-by-fields
Entry.objects.order_by('blogs_blog.name', 'headline')
とあるが、
Entry.objects.select_related().order_by('blogs_blog.name', 'headline')
こうしないと、blogs_blog.name なんてカラムないよってエラーになる。
スタッフだけに見せたい場合は
django.contrib.admin.views.staff_member_required デコレータを使う。
特定の権限で制限したい場合は
django.contrib.auth.permission_required デコレータでいいのかな?
管理画面で初期値をセットするには
クエリパラメータを渡してやればいいだけだった。ManyToManyのフィールドは , (カンマ)で区切る。
/admin/appname/modelname/add/?fieldname1=fieldvalue1&fieldname2=fieldvalue2,fieldvalue3