2016-10-19 5 views
0

私は、コードの代わりに私が辞書を追加し、テンプレートでそれにアクセスできるようにしたい「仕事」のモデルDjangoの選択肢と辞書

category = models.IntegerField(choices=CATEGORY_CHOICES, default=JOBS) 

JOBS = 1 
CATEGORY_CHOICES = ((JOBS, "Jobs"),) 

、コードを持っています。例

JOBS = 1 
CATEGORY_CHOICES = ((JOBS, {'title':"Jobs",'icon':"fa fa-briefcase",'slug':"jobs"}),) 

のためではなく、代わりに、私は選択肢に辞書を追加する方法次の

enter image description here

を取得しますか? 私はセットアップされるモデルを作成することができました:タイトルとアイコン。しかし代わりに、私は選択肢を作ることにしました。タイトルは追加できますが、選択したアイテムはアイコンを設定できますか?

+0

はそれがJOBSが= 1 ' –

+0

あなたが何をしたいのか明確にする '何を意味しています –

+0

@ HishamKaram私はモデルを作成することができました。これは、タイトルとアイコンです。しかし代わりに、私は選択肢を作ることにしました。タイトルは追加できますが、選択したアイテムはアイコンを設定できますか? – alexander

答えて

2

私はコメントしますが、悲しいことに十分な担当者ではありません。 IntegerFieldの設定では、辞書の値が表示され、辞書のキーが返されます。

あなたがしたいと思われることは、そのキーに他のいくつかの値の結果を決定させることです。あなたがしなければならないことは、あなたがそのフォームを提出するどのような見解であっても、IntegerFieldによって返されたキーに基づいて他の値を設定することです。言い換えれば

if CATEGORY_CHOICES == 1: 
    title = 'Jobs' 
    icon = 'fa fa-briefcase' 
    slug = 'jobs' 
elif CATEGORY_CHOICES == 2: 
    title = 'Cities' 
` icon = 'fa fa-city' 
    slug = 'cities' 
+0

こんにちはグレッグ、答えとしてコメントを使用しないでください。質問に対する潜在的な解決策がある場合は、回答を修正してください。 – Soviut

+0

私はキーを使って後でパラメータを設定して解決策を与えたと思います。あなたはより良いものを与えました。 –

+0

@GregSchmitありがとうございます。私はこの種の依存関係を使う以外に選択肢はありません。 – alexander

2

Djangoモデルの選択肢は、(key, value)タプルです。キーは保存時にモデルのフィールドに格納されることを意味し、その値はオプションとして表示されるものです。辞書に値を単に入れることはできません。

たとえば、次の選択肢はデータベースにhumanを格納し、選択フィールドにHumansを表示します。

species = [ 
    ('human', 'Humans'), 
    ('reptile', 'Reptiles'), 
    ('cylons', 'Aliens'), 
] 

代わりに、データのモデリング方法を再構成する必要があります。スラッグ、アイコン、およびタイトルのフィールドを含む選択肢を表す別のCategoryモデルを作成する必要があります。

class Category(models.Model): 
    slug = models.SlugField() 
    title = models.CharField() 
    icon = models.CharField() 

その後、ForeignKey()を使用してCategoryモデルであなたの現在のモデルを指します。リストの選択肢として(外部キー全体に関係する)に関連するカテゴリモデルをレンダリングするためのフォームをレンダリングする際

class MyModel(models.Model): 
    category = models.ForeignKey(Category) 

最後に、あなたはModelChoiceFieldを使用することができます。 ModelFormを使用する場合、すべての外部キーはデフォルトでModelChoiceFieldと表されます。

+0

に保存したいTOUん。しかし、私はしたい場合:(キー、{「キー」:「値」、「キー」:値を})? – alexander

+0

できません。私はちょうどそれを説明した。それはリレーショナルデータベースの仕組みではありません。 – Soviut

+0

返信いただきありがとうございます。私はデータベースの外にリストを作成したいが、より多くのフィールドが必要です。私はそれを別々に実装する方法を考えます。 – alexander

1

あなたはChoicesクラスフォームdjango_model_helpersアプリを使用することができます。

CATEGORY_CHOICES = ((1, 'Jobs'),(2, 'Cities'),) 

はその後、クラス内またはこのフォームはに提出されていることを確認します。コードからのアクセスアイコンに今

category = models.IntegerField(choices=CATEGORY_CHOICES(), default=CATEGORY_CHOICES.jobs) 

モデルで次に https://github.com/rewardz/django_model_helpers

CATEGORY_CHOICES = Choices(
    {"jobs": {'id': 1, 'display': 'Jobs', 'icon':"fa fa-briefcase",'slug':"jobs"} 
) 

icon = CATEGORY_CHOICES.get_value(my_inst.category, "icon") 
slug = CATEGORY_CHOICES.get_value(my_inst.category, "slug") 
関連する問題