現在選択されていない選択肢の選択肢フィールドの名前付き値を取得したいと思います。これは可能ですか?
たとえば、models.py
FILE_STATUS_CHOICES = (
('P', 'Pending'),
('A', 'Approved'),
('R', 'Rejected'),
)
class File(models.Model):
status = models.CharField(max_length=1, default='P', choices=FILE_STATUS_CHOICES)
views.py
f = File()
f.status = 'P'
f.save()
old_value = f.status
print f.get_status_display()
> Pending
f.status = 'A'
f.save()
new_value = f.status
print f.get_status_display()
> Approved
古い表示値を「P」から「保留」にするにはどうすればよいですか?ビューでフォームを作成し、その値/ラベルのディクショナリにアクセスすることで、そうすることができるかもしれません。これは最善の/唯一のアプローチですか?
これは、モデルから_FILE_STATUS_CHOICES
_の選択マッピングをインポートし、それを使用してPending
by P
を取得するのにかなり問題ありません。
_from my_app.models import FILE_STATUS_CHOICES
print dict(FILE_STATUS_CHOICES).get('P')
_
モデルのget_FIELD_display()
メソッドは、基本的に同じことをしています。
_def _get_FIELD_display(self, field):
value = getattr(self, field.attname)
return force_text(dict(field.flatchoices).get(value, value), strings_only=True)
_
また、モデルフィールドにはflatchoices
フィールドがあるため、__meta
_およびget_field_by_name()
メソッドを使用して使用できます。
_choices = f._meta.get_field_by_name('name')[0].flatchoices
print dict(choices).get('P')
_
ここで、f
はモデルインスタンスです。
以下も参照してください:
Django-model-utils
のChoice
を使用することをお勧めします: https://Django-model-utils.readthedocs.io/en/latest/utilities.html#choices 。
選択フィールドが必要な場合は、すべてのモデルで使用します。例を参照してください。優れたオプションがあります。