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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

436閲覧

forms.pyの処理が分かりません

blue_python

総合スコア2

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

2クリップ

投稿2023/01/21 06:35

前提

djangoでsnsアプリを作ってます。

・3~4行目の__init__の処理で何をしているのか?

・4行目のsuper(GroupCheckForm, self)の書き方を見たことなので混乱してる。super().init(self, *args, **kwargs)ではダメなのか?

・6行目の変数の書き方が分かりません。self.fields['groups']。self.groupsではダメなのか?

該当のソースコード

python

1# forms.py-------------- 2class GroupCheckForm(forms.Form): 3 def __init__(self, user, *args, **kwargs): 4 super(GroupCheckForm, self).__init__(*args, **kwargs) 5 public = User.objects.filter(username='public').first() 6 self.fields['groups'] = forms.MultipleChoiceField( 7 choices=[(item.title, item.title) for item in Group.objects.filter(owner__in=[user, public])], 8 widget=forms.CheckboxSelectMultiple(), 9 ) 10 11 12# models.py-------------- 13class Group(models.Model): 14 owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='group_owner') 15 title = models.CharField(max_length=100) 16 17 def __str__(self): 18 return self.title 19 20 21# views.py-------------- 22if request.method == 'POST': 23 checkform = GroupCheckForm(request.user,request.POST) 24else: 25 checkform = GroupCheckForm(request.user) 26 27return render(request, 'sns/index.html', checkform) 28 29 30# index.html-------------- 31<form action="{% url 'index' %}" method="post"> 32 {% csrf_token %} 33 <input type="hidden" name="mode" value="__check_form__"> 34 {{check_form}} # 最終的にここを表示させたい 35 <button>update</button> 36</form>

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

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

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

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

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

guest

回答1

0

ベストアンサー

3~4行目の__init__の処理で何をしているのか?

・親クラスの__init__メソッドを呼び出す。
・直読すると、Userのオブジェクトからusernameがpublicのものを選んで、最初のやつをpublicとする。
・プルダウンリストを作ってself.fields['groups']に設定

4行目のsuper(GroupCheckForm, self)の書き方を見たことなので混乱してる。super().init(self, *args, **kwargs)ではダメなのか?

同じことをやっています。superの引数は省略できますが、省略したときのデファルトと同じ値を設定しています。 設定するかどうかは好みの問題でしょう。
https://docs.python.org/ja/3.5/library/functions.html?highlight=type#super

6行目の変数の書き方が分かりません。self.fields['groups']。self.groupsではダメなのか?

self.fields['groups'] はインスタンスの fieldes変数(これは辞書)のキーgroupsの値で、self.groups は インスタンスのgroups変数ですから、全くちがうものです。
同じだと思う理由は何ですか?

投稿2023/01/21 12:44

TakaiY

総合スコア12745

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

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

blue_python

2023/01/22 02:58

3~4行目は解決しました。ありがとうございます!! 6行目のfieldes変数はどのタイミングで定義されたものでしょうか? 変数[キー] = models.〇〇() の書き方なんてするんでしょうか? fieldes = {} をどこかで定義してるなら fieldes['groups'] = forms.MultipleChoiceField()のインスランス で格納するのは理解できます。 djangoのモデルやフォームで class モデル名(models.Model): 変数 = models.〇〇() # わかる 変数[キー] = models.〇〇() # 分からない
TakaiY

2023/01/22 03:47

> 6行目のfieldes変数はどのタイミングで定義されたものでしょうか? そのために、 super().__init__() を呼び出す必要があるのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問