2016-03-24 23 views
2

私はコードを書いたが、Djangoテンプレートで隠しタグ'name''value'を設定する方法がわからない。私はDjango's Widgets Docsを読むが、私は道を見つけることができなかった。Djangoの各HiddenInputフィールドにどのように値を設定できますか?

(Pdb) print(errors) 
<ul class="errorlist"><li>friend_id<ul class="errorlist"><li>This field is required.</li></ul></li><li>add_remove<ul class="errorlist"><li>This field is required.</li></ul></li></ul> 

まず、私は

<input type="hidden" name="friend_id" value="{{ user_info.user_id }}"> 

friend_id = request.POST.friend_id 

のように書くことを試みた。しかし、私は、DjangoのフォームなしでPOST値を取得する方法を得ることができませんでした。だから、私はDjangoのFormを以下のコードで使用しました。

views.py

from myapp.forms import HiddenUserPage 
hiddenform = HiddenUserPage 
if request.method == 'POST': 
    hidden = hiddenform(request.POST) 

if hidden.is_valid(): 
    from myapp.models import Friends 
    try: 
     friend_id = hidden.cleaned_data['friend_id'] 
     add_remove = hidden.cleaned_data['add_remove'] 
     if add_remove == "add": 
      f = Friends(user_id=request.user.user_id, friend_id=friend_id) 
      f.save() 
     elif add_remove == "remove": 
      f = Friends.objects.filter(user_id=request.user.user_id).get(friend_id=friend_id) 
      f.delete() 
    except: 
     errors = "DB error" 
    else: 
     errors = hidden.errors 
else: 
    hidden = hiddenform() 
    errors = "" 


view = { 
    'errors': errors, 
    'hidden': hidden, 
} 

template = 'myapp/user/user_page.html' 
return render(request, template, view) 

forms.py

class HiddenUserPage(forms.Form): 

    friend_id = forms.CharField(widget=forms.HiddenInput()) 
    add_remove = forms.CharField(widget=forms.HiddenInput()) 

user_page.html

<form method="POST" action="" class=""> 
     {% csrf_token %} 
     <p class="submit"> 
      <button class="confirmbutton" type="submit"> 
       {% if is_friend %} 
        remove friend 
       <!-- # I'd like to write like # --> 
       <!-- <input type="hidden" name="friend_id" value="remove"> # --> 
       <!-- <input type="hidden" name="friend_id" value="{{ user_info.user_id }}"> # --> 
        {{ hidden.add_remove }} 
        {{ hidden.friend_id }} 
       {% else %} 
        add friend 
       <!-- <input type="hidden" name="friend_id" value="add"> # --> 
       <!-- <input type="hidden" name="friend_id" value="{{ user_info.user_id }}"> # --> 
        {{ hidden.add_remove }} 
        {{ hidden.friend_id }} 
       {% endif %} 
      </button> 
     </p> 
    </form> 

申し訳ありませんが、私のコードが汚いです。

答えて

2

質問がフォームに初期データを提供するには、それは一般的に例えば、フォームのインスタンス化にinitialを渡すビューで行われていますされているように見えます:

# In your view.py 
def ...(...): 
    # Inside your view function 
    if request.method == 'GET': 
     # Provide initial data to the form here 
     # Get your 'user_info' from models or sessions, 
     # or wherever you keep it 
     hidden = hiddenform(initial={"friend_id":user_info.user_id}) 
    if reuest.method == 'POST': 
     hidden = hiddenform(request.POST) 
     # Process posted form data 
     ... 
    # More code general for both HTTP verbs 
    view = {'errors': errors, 'hidden': hidden} 
    template = 'myapp/user/user_page.html' 
    return render(request, template, view) 

あなたはまたにフォームをバインドする場合がありますモデルデータは直接、the docs for more infoを参照してください。

+0

ニキータに感謝します。 「初期」が働く。ありがとうございました。 – yamachan

+0

@yamachan、喜んで、私はあなたを助けてくれました。 – Nikita

+0

本当にありがとうございます。 – yamachan

関連する問題