2016-03-24 10 views
2

Ich schrieb Codes, aber ich weiß nicht, wie man 'name' und 'value' von versteckten Tag mit Django Vorlage einstellen. Ich lese Django's Widgets Docs, aber ich konnte den Weg nicht finden.Wie kann ich Werte für jede HiddenInput-Felder von Django setzen?

(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> 

Zuerst habe ich versucht, wie

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

und

friend_id = request.POST.friend_id 

zu schreiben, aber ich konnte nicht, wie POST-Werte ohne Django-Formular zu erhalten. Also habe ich Djangos Formular mit folgenden Codes benutzt.

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> 

Sorry, mein Code ist verdreckt.

Antwort

2

Sieht aus wie die Frage der Bereitstellung der Ausgangsdaten in der Form ist, ist es dann in der Regel in der Ansicht getan initial die Form Instanziierung vorbei, zum Beispiel:

# 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) 

Sie auch das Formular mögen gebunden Modelldaten direkt, siehe the docs for more info.

+0

Ich danke Ihnen, Nikita. "anfänglich" funktioniert. Vielen Dank. – yamachan

+0

@yamachan, Froh, dass ich dir helfen konnte. – Nikita

+0

Wirklich danke. – yamachan