2017-08-30 13 views
0

私はDjangoでもっと新しくなりました。私はdjangoがデータベースに複数選択リストボックスの値を格納する方法を説明している記事またはSOスレッドを検索していましたが、それを見つけることができませんでした。複数の選択値をdjangoに格納する

私の場合、カテゴリリストボックス(例:C1,C2,C3)があります。カテゴリ名は長いものにすることができます。私は単一のユーザーに複数のカテゴリを割り当てる必要があります。ユーザーには単一のカテゴリに割り当てることもできます。

次のようになります。私のモデル

class Category(models.Model): 
    user = models.ForeignKey(User) 
    cat_name = models.CharField(max_length=100) 
    #or cat_name = models.TextField() 

私の質問は、DjangoがDBに値を格納する方法である(cat_nameのfielsが、それはDBに保存する方法によって異なります)

id user_id cat_name 
1  1   C1&C2&C3 
2  2   C1&C2 
3  3   C3 

または

id user_id cat_name 
1  1   C1 
2  1   C2 
3  1   C3 
4  2   C1 
5  2   C2 
6  3   C3 

最初のケースの場合は、TextField以外のCharFieldを使用します。最初のケースで使用された&は単なる例です。

すべての提案/リンクは高く評価されています。前もって感謝します。

+2

マルチセレクションのリストボックスは、ウェブサイトのフロントエンドにあるもので、データベースに保存する方法は、選択するモデルフィールドによって異なります。別のモデルで 'ManyToManyField'を使うと、2番目の例のようなものが得られます。 – bouteillebleu

+0

@bouteillebleu多くのありがとう。私は管理者の複数選択リストボックスを持ち、管理者はユーザーにカテゴリを割り当てます。 'ManyToManyField'を' separate model'で使う方法がありますか? –

+1

https://stackoverflow.com/questions/45407132/django-many-to-many-relationship-categoryのmodels.pyの例はまったく役に立ちますか? https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/には、一般的な 'ManyToManyField'の助けが必要です。 – bouteillebleu

答えて

0

Djangoはデータを文字列として保存します。

はあなたのModelFormでなMultipleChoiceFieldがcat_nameと呼ばれており、フィールドの定義されたスキーマがCharFieldであるだろう。

Djangoは保存前のリストとしてフォームの値を持っています。 これを保存すると、get_prep_valueの呼び出し中にフィールドのpython値が対応するdb値に変換されます。これで

>>> selection = ['cat 1', 'cat 2', 'cat 3'] 
>>> str(selection) 
"['cat 1', 'cat 2', 'cat 3']" 

トラブル:

  • は、あなたはどのようにバックto_python変換するDjangoに教えなければなりません。
  • 行全体にデータを複製しています。
関連する問題