2017-11-29 8 views
0

"or"を使用してクラスに引数を送信すると、クラスのインスタンスがどのように作成されますか。 form_ = SchoolForm(request.POST or NONE)を使用複数の引数をクラスに "or"で送信していますか?

views.py

form_ = SchoolForm(request.POST or NONE) 

form.py

class SchoolForm(forms.Form): 
    name =   forms.CharField() 
    location =  forms.CharField(required=False) 

代わり

form = SchoolForm() 
if request.method == "POST": 
    form = SchoolForm(request.POST) 
+4

class Main: def __init__(self, x): self.x = x @property def show(self): print self.x b = {'first':'done'} c = {} obj = Main(b or c) obj.show b['second'] = 'done' # even after the class instantiate it will, # still update the value of class variable. obj.show 
は、 'X又はY'の_always_は' X 'を生成します。 – khelwood

+1

@ShreyamAdhikariあなたはすでに 'request.POSTまたはNone'がどのように動作するかについての答えを得ています。さて、このイディオムは実際には反パターンです。本文がないPOSTリクエストを受け取った場合、フォームは 'data'引数なしで作成され、アンバウンドフォームになり、エラーメッセージは表示されません。 –

+0

しかし、私は有効なデータだけを取るためにname = form.CharFiled(null=False, min_length=5, max_length=50)のような制限を使用しています –

答えて

2

orのうちの正確に1つのオペランドに評価演算子です。 SchoolFormは1つの引数のみを表示します。「真実」の場合はrequest.POSTの値(つまり、bool(request.POST)Trueと評価されます)。それ以外の場合はNONEの値です。

あなたの編集に基づいて、私が何をしたいことは

form_ = SchoolForm(request.POST if request.method == "POST" else None) 

SchoolForm(None)SchoolForm()が等価であると仮定して)いると思います。

+0

しかし、これを行うのは何ですか? –

+0

私は 'SchoolForm'が複数の引数を受け取っているという誤解を修正しています。私は 'SchoolForm'にどんな議論(または議論)が合うか知るために十分なDjangoを知らない。 – chepner

+0

私はテンプレートでコンテキストとして送信するフォームインスタンスを作成しています。しかし、POSTリクエストを取得している場合は、POST値を使用してPOSTリクエストを作成します。 –

0

まず、NONEは、Pythonでは有効なキーワード/オブジェクトではなく、前述の名前で変数を定義していない限り、解析エラーが発生します。代わりにNoneを意味すると思います。

あなたの質問に答えるために、ブール式は、解析しなければならない最後の値を返します。orが最初の真理値です。最初の変数は、None0であれば、いくつかの値がそれで見られ、他のされている場合

>>> 0 or 1 
1 
>>> 1 or 0 
1 
>>> 0 or False 
False 
>>> {} or None 
None 
+2

'NONE'は有効な識別子ですが、私はこの質問の目的のために、それが以前に定義されていると仮定できると思います。 – chepner

+0

@chepnerなぜあなたは、それがtypoであるということよりも 'NONE'という名前の定数を明示的に定義したと仮定しますか? – hspandher

+1

この値は、手元の質問にはほとんど関係していないようです。あなたの答えは 'NONE'に割り当てられた特定の値に依存しません。 'None'のためのタイプミスであれば、あなたの答えにも影響しません。つまり、「要求」は、書かれている質問と同じように定義されていません。あなたはそれを呼び出すことはありません。 – chepner

0

orオペレータは、最初の変数を選択します""など私も指摘したいと思い何

、これらのコンストラクタパラメータは参照によって呼び出されるため、宣言後も引き数に加えられた変更は、直接使用された場合のargsの値に影響します。 'X'がfalseyある場合X 'はtruthyであり、 `` Y`場合Pythonで

{'first': 'done'} 
{'second': 'done', 'first': 'done'} 
関連する問題