質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

6331閲覧

Django Python Model,ModelFormでのchoicesの挙動(順序がおかしい)について

yuki1010

総合スコア43

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/06/26 07:39

いつも質問させてもらい大変助かっております。
今回も質問させて下さい。
Djangoで Modelを作成する際に、特定のfieldにchoiceを付けて、それに付随するFormをModelFormとして動かしているのですが、表示した選択項目の順序が私が、イメージしている書いた通りの順序になりません。
どなたかのアドバイス等がありましたら幸いです。

Modelのコードは

python

1from core.choices import RANK_CHOICE, BUNRUI_CHOICE, TAIOU_CHOICE 2 3 4class Report(TimeStampedModel): 5 customer = models.ForeignKey( 6 Customer, on_delete=models.CASCADE, verbose_name="顧客", 7 related_name="report_customer", null=True, blank=True 8 ) 9 tant = models.ForeignKey( 10 User, on_delete=models.CASCADE, verbose_name="担当", 11 related_name="customer_tant", null=True, blank=True) 12 taiousha = models.ForeignKey( 13 User, on_delete=models.CASCADE, verbose_name="対応者", 14 related_name="customer_taiousha", null=True, blank=True) 15 16 taiou = models.CharField( 17 choices=TAIOU_CHOICE, 18 verbose_name="対応", max_length=20, blank=True) 19 20 rank = models.CharField( 21 choices=RANK_CHOICE, 22 verbose_name="ランク", max_length=2, blank=True) 23 bunrui = models.CharField( 24 choices=BUNRUI_CHOICE, 25 verbose_name="分類", max_length=4, blank=True) 26 27 day = models.DateField( 28 verbose_name="日付", blank=True, null=True) 29 30 report = models.TextField( 31 blank=True, verbose_name="日報") 32 33 def __str__(self): 34 return self.customer.name + str(self.pk) + "日報" 35 36 def get_absolute_url(self): 37 return reverse('report:edit', kwargs={'pk': self.pk})

choiceを読み込ませているコードは(choices.py)

python

1TAIOU_CHOICE = { 2 ('', '--'), 3 ('電話:受け', '電話:受け'), 4 ('電話:掛け', '電話:掛け'), 5 ('メール:受け', 'メール:受け'), 6 ('メール:送る', 'メール:送る'), 7 ('来社', '来社'), 8 ('訪問', '訪問'), 9} 10 11RANK_CHOICE = { 12 ('', '--'), 13 ('A', 'A'), 14 ('B', 'B'), 15 ('C', 'C'), 16 ('D', 'D'), 17} 18 19BUNRUI_CHOICE = { 20 ('', '--'), 21 ('買主', '買主'), 22 ('借主', '借主'), 23 ('地主', '地主'), 24 ('介護', '介護'), 25}

Formのコードは(forms.py)

python

1from django import forms 2from .models import Report 3 4 5class ReportModelForm(forms.ModelForm): 6 7 def __init__(self, *args, **kwargs): 8 super(ReportModelForm, self).__init__(*args, **kwargs) 9 self.fields['tant'].label_from_instance = lambda obj: "{}{}".format( 10 obj.last_name, obj.first_name) 11 self.fields['taiousha'].label_from_instance = lambda obj: "{}{}".format( 12 obj.last_name, obj.first_name) 13 14 class Meta: 15 model = Report 16 fields = [ 17 'tant', 'taiousha', 'taiou', 18 'rank', 'bunrui', 'day', 'report', 19 ] 20 widgets = { 21 'day': forms.TextInput(attrs={'type': 'date'}), 22 }

以上です。

分類の選択項目を例に上げると
↓↓

イメージ説明

をクリックしてみると
↓↓
イメージ説明

上記の様に、 --・買主・借主・地主・介護の順に表示したい所が、バラバラの順序で表示されてしまいます。
なにかアドバイス頂けると幸いです。
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

お騒がせしました。多分解決出来ました。
解決方法は
choice.pyの部分の配列が連想配列になっていることが原因でした。

BUNRUI_CHOICE = {
('', '--'),
('買主', '買主'),
('借主', '借主'),
('地主', '地主'),
('介護', '介護'),
}
の{}を() tupleに直すことで解決出来ました。
BUNRUI_CHOICE = (
('', '--'),
('買主', '買主'),
('借主', '借主'),
('地主', '地主'),
('介護', '介護'),
)
お騒がせ致しました。

投稿2017/06/26 07:45

yuki1010

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問