2017-12-30 6 views
0

テーブルには2つのフィールドがあります。 trackword and created_byModelFormsを使用すると、フィールドの修正方法がわかりません

フィールド "created_by"をforms.pyに含めると、選択リストが表示されますが、作成者を選択することはできますが、それは問題なく保存されますが、明らかに手動で行う必要はありません一方ではログインした人物であり、他のユーザーが選択リスト内の他の既存のユーザーに表示されるという問題を引き起こすため、選択リストを使用してトラックワードを追加するユーザーを指定します他の人が見ることはできません。

だから、私のフォームのコードは次のように見える場合:

@login_required 
def add_trackword(request): 
    form = masterform(request.POST or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      form.save() 
      messages.add_message(request, messages.SUCCESS, "The post has been saved!") 
      return HttpResponseRedirect("/trackwords/list/") 

    return render(request, 'masterform.html', {'form': form}) 

FORM

<div class="row" > 
    <div class="panel panel-default col-md-4"> 
     <div class="panel-body"> 
      <form action="" method="post">{% csrf_token %} 
       {{ form.as_p }} 
      <input type="submit" class="btn btn-block btn-success" value="Submit"> 
     </form> 
     </div> 
    </div> 
</div> 

あなたが見るように、フォームが自動的にDjangoのモデルフォームエンジンによって作成され、私はいけないながらしなければなりませんさフィールドを書くことも、CANを使うこともできません。または私はどのようにどのように知っていない。私はこれを追加したいと思います。 'request.user'はそのコードスニペットのどこかにあります。なぜなら、テーブルが行セル内のcreated_byを取得しないと、空でないセル制約not nullが返されるからです。

これらすべての抽象化によって、編集が非常に難しくなります。私が手作業でフォームを書いた場合、私はdjangoが私のためにすべてを作成するようにすれば、クライアントのチェックを追加することもできます。

答えて

0

私は自分自身で答えを見つけました...:&もちろん、これは誰もそれを知らなかったわけではありませんが、実際に私はそれを知らなかったかもしれません。

実際には、フォームを作成するときにエンジンを動作させることはできませんが、フォームをviews.pyに保存して調整することができます。

フォームを先に保存する代わりに、コミットをfalseにします。私の場合は、必要な行をpost.created_by = request.user

に追加してから保存してください。

私は天才ではありませんか?

関連する問題