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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1945閲覧

【Django】forms.ModelFormでModelChoiceFieldの使いかた

akaiman

総合スコア8

Django

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/10 03:55

forms.ModelFormを使ってあるフィールドを複数選択させたい

現在、個人的にWEBサイトにあるような新着情報システムを作りたいと考え作業しています。
Models.pyにデータベースのテーブルを定義しフィールド名を作成しました。
そのModelで定義したデータベースをformを使って更新できるようにしたいのですがうまくいきません。

forms.pyではforms.ModelFormを使ってModelで定義したデータベースを更新したいと考えています。
そこでModelで定義した「category」の項目だけ更新時に複数選択にしたいのですがうまくできません。(複数選択の項目は動的ではなく静的で考えています)
ご教授いただけないでしょうか?

該当のソースコード

models.py

1class News(models.Model): 2 title = models.CharField(max_length=100, verbose_name='タイトル') 3 category = models.CharField(max_length=100, verbose_name='カテゴリー') 4 content = models.TextField(max_length=500, verbose_name='記事内容') 5 data = models.DateTimeField(auto_now_add=True, verbose_name='投稿日') 6 7 def __str__(self): 8 return self.title

forms.py

1class NewsForm(forms.ModelForm): 2 class Meta: 3 form = News 4 fields = ('title', 'category', 'content', 'data') #categoryを複数選択にしたい(固定項目) 5

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

提案なんですが、普通カテゴリーって一つじゃないですよね。例えば、あなたの質問は、PythonとDjangoの二つのカテゴリーになっています。なので、

Python

1class Category(models.Model): 2 name = models.CharField(max_length=100) 3 4class News(models.Model): 5 title = models.CharField(max_length=100, verbose_name='タイトル') 6 category = models.ManyToManyField(Category) 7 content = models.TextField(max_length=500, verbose_name='記事内容') 8 data = models.DateTimeField(auto_now_add=True, verbose_name='投稿日') 9 10 def __str__(self): 11 return self.title 12```Categoryテーブルを作り、ManyToManyFieldでそれを結び付ければ、カテゴリーの操作も簡単にできますし、良いと思います。 13adminでCategoryにいろいろ登録してみてください。 14 15でも、 16カテゴリーが一つの方がよい場合は、 17```Python 18category = models.ManyToManyField(Category) 19# ↓ 20category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="news_category") 21```ForeignKeyを使うといいでしょう。 22 23これでModelFormにしたら、Categoryテーブルに保存したnameでChoiceFieldになるはずです。

投稿2020/06/10 04:29

編集2020/06/10 04:33
ForestSeo

総合スコア2720

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

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

akaiman

2020/06/10 07:20

お忙しい中ご回答ありがとうございました。 ご提案いただきました内容で作業すすめていきたいと思います。 また機会がありましたら何卒、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問