ModelFormでfieldの表示順番を変える
Django 1.1から加わった機能です。
fieldの表示順序
従来はModelFormを使ったformオブジェクトを表示する際のfieldの並びは
modelのfieldの順序と同じでした。
そのため、順序を変えるために少しコーディングをする必要がありました。
そこで、新しく追加された機能fieldsを使ってみましょう。
サンプルmodel,form作成
以下のようなmodelとformを作成します。(template等は省略します。)
models.py
from django.db import models
from django.contrib.auth.models import User
class Tag(models.Model):
tag = models.CharField(max_length=10)
def __unicode__(self):
return self.tag
class Blog(models.Model):
title = models.CharField(max_length = 50)
author = models.ForeignKey(User)
content = models.TextField()
post_date = models.DateTimeField(default = datetime.now)
tags = models.ManyToManyField(Tag)
def __unicode__(self):
return self.title
def save(self):
if not self.id:
self.post_date = datetime.datetime.now()
super(Blog, self).save()
forms.py
from django import forms
from appname.models import Blog, Tag
class BlogForm(forms.ModelForm):
class Meta:
model = Blog
表示すると以下のようになります。
formオブジェクトの修正
今度はfieldの表示順番を'title','author','content','tags', 'post_date'に変更します。
内部Metaクラスにfieldsを追加して、表示したい順にリスト形式で記述するだけです。
forms.py
from django import forms
from appname.models import Blog, Tag
class BlogForm(forms.ModelForm):
class Meta:
model = Blog
fields = ['title','author','content','tags', 'post_date']
修正後は以下の通りです。
小さな追加ですが、フル活用したい機能ですね。

