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

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

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

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

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Python

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

Q&A

0回答

1421閲覧

Djangoで'QueryDict' object has no attribute 'all'と出る

swing_swimming

swing_swimming

総合スコア54

Django

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

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Python

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

0グッド

1クリップ

投稿2020/01/26 12:54

編集2020/01/28 12:27

前提・実現したいこと

udemyでDjangoの使い方を学び、新たに1からつくってみようと質問投稿サイトを作っています。

現在、UserのGroup限定で表示できるようにViewやFormを編集しました。
リストに表示する際に、ログインしているユーザーがそのグループに属さない場合には、表示しないようにしたいです。

発生している問題・エラーメッセージ

ViewやFormでUserのGroupのみformに表示されるようにしましたが、いざ送信するとエラーが出てしまいます。
今日一日中考えていましたが、解決しなかったので質問します。

~~~スタックトレース~~~
Internal Server Error: /question/create/
Traceback (most recent call last):
File "C:\Users\tensaiTVkun\Anaconda3\envs\mysite\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\tensaiTVkun\Anaconda3\envs\mysite\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\tensaiTVkun\Anaconda3\envs\mysite\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\tensaiTVkun\Anaconda3\envs\mysite\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\tensaiTVkun\Anaconda3\envs\mysite\lib\site-packages\django\contrib\auth\mixins.py", line 52, in dispatch
return super().dispatch(request, *args, **kwargs)
File "C:\Users\tensaiTVkun\Anaconda3\envs\mysite\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\tensaiTVkun\Documents\majiranger\majiblue\views.py", line 250, in post
form = self.form_class(request.POST)
File "C:\Users\tensaiTVkun\Documents\majiranger\majiblue\forms.py", line 86, in init
self.fields['share_group'].queryset = group_ids
File "C:\Users\tensaiTVkun\Anaconda3\envs\mysite\lib\site-packages\django\forms\models.py", line 1206, in _set_queryset
self._queryset = None if queryset is None else queryset.all()
AttributeError: 'QueryDict' object has no attribute 'all'

該当のソースコード

Python

1views.py 2class QuestionCreateView(LoginRequiredMixin, CreateView): 3 model = Question 4 form_class = QuestionForm 5 success_url = reverse_lazy("question_index") 6 login_url = '/login/' 7 template_name = 'qasite/question_form.html' 8 initial = {'key': 'value'} 9 10 def get(self, request, *args, **kwargs): 11 #ユーザーのグループをformに渡す 12 form_class = self.get_form_class() 13 group_ids = self.request.user.groups.all() 14 form = form_class(group_ids=group_ids) 15 params = { 16 'form':form, 17 } 18 return render(request, self.template_name, params) 19 20 def post(self, request, *args, **kwargs): 21 form = self.form_class(request.POST) 22 23 question = Question 24 question.owner = request.user 25 question.save() 26 27 if form.is_valid(): 28 messages.success(self.request, "保存しました") 29 return redirect(to=reverse_lazy("qasite:question_index")) 30 else: 31 messages.success(self.request, "保存に失敗しました") 32 return redirect(to=reverse_lazy("qasite:question_index")) 33 34 return render(request, self.template_name, params)

Python

1models.py 2class Question(models.Model): 3 title = models.CharField(max_length=140, verbose_name='件名') 4 question = models.TextField(verbose_name='質問内容') 5 owner = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='投稿者') 6 category = models.IntegerField(choices=q_category, verbose_name='カテゴリー') 7 posted_date = models.DateTimeField(auto_now_add=True, verbose_name='投稿時間') 8 update_date = models.DateTimeField(auto_now=True, verbose_name='更新時間') 9 share_group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name='投稿先グループ', null=True, blank=True) 10 is_answered = models.BooleanField(verbose_name='回答済み', default=False) 11 is_public = models.BooleanField(verbose_name='公開', default=True) 12 image = models.ImageField(upload_to='images/', verbose_name='画像', blank=True, null=True) 13 14 def __str__(self): 15 return self.title

Python

1forms.py 2class QuestionForm(forms.ModelForm): 3 class Meta: 4 model = Question 5 fields = ["title", "category", "question", "image", "share_group", ] 6 7 def __init__(self, group_ids, *args, **kwargs): 8 #viewsからユーザーのグループを受け取り、groupにセットする 9 super(QuestionForm, self).__init__(*args, **kwargs) 10 print(group_ids) 11 self.fields['share_group'].queryset = group_ids

試したこと

views.pyのpostの部分に
form_class = self.get_form_class()
group_ids = self.request.user.groups.all()
form = form_class(group_ids=group_ids)
が必要かと思い追加しましたが、グループが保存されませんでした。

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

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

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

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

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

tatamyiwathy

2020/01/28 02:37

'QueryDict' object has no attribute 'all'だけでは情報が不足していると思われます。Djangoが出力したスタックトレースを貼り付けるのがよろしいのではないでしょうか。
swing_swimming

swing_swimming

2020/01/28 12:28

ありがとうございます。 スタックトレースがわからなかったのですが、こういうことでしょうか? よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問