2015年2月15日日曜日

モデルから作成したドロップダウンの表示順を変更する

django では容易にモデルから登録フォームを作成することができる。
その際、モデルの型が ForeignKey になっている項目は、ModelChoiceField が割り当てられるが、通常、ドロップダウンの表示順は参照先テーブルのID順となる。

以下のモデルを想定する。
class Organization(models.Model):
    organization_id = models.CharField(max_length = 5)  # 組織ID
    name = models.CharField(max_length = 20)            # 組織名

    def __unicode__(self):
        return self.name
    
class User(models.Model):
    staff_id = models.CharField(max_length = 7)         # スタッフID
    name = models.CharField(max_length = 15)            # スタッフ名
    organization = models.ForeignKey(Organization)      # 所属組織
本来、組織ID順にソートしたいところだが、実際は組織テーブルへの登録順に表示されてしまう。
組織ID順にソートするためには、組織テーブルに Meta クラスを追加し、デフォルトの取得順序を設定する。
class Organization(models.Model):
    organization_id = models.CharField(max_length = 5)  # 組織ID
    name = models.CharField(max_length = 20)            # 組織名

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ["organization_id"]

0 件のコメント:

コメントを投稿