मैं उपयोगकर्ताओं और चेकबॉक्सों की एक सूची के साथ एक पृष्ठ बनाना चाहता हूं जो उपयोगकर्ता को चुना गया है, जो सिग्नल उपयोगकर्ताओं को कुछ क्रिया लागू करेगा। मेरे टेम्पलेट मेंटेम्पलेट में django फॉर्म फ़ील्ड को प्रस्तुत करने के लिए कैसे करें
#in forms.py
class UserSelectionForm(forms.Form):
"""form for selecting users"""
def __init__(self, userlist, *args, **kwargs):
self.custom_fields = userlist
super(forms.Form, self).__init__(*args, **kwargs)
for f in userlist:
self.fields[str(f.id)] = forms.BooleanField(initial=False)
def get_selected(self):
"""returns selected users"""
return filter(lambda u: self.fields[str(u.id)], self.custom_fields)
मैं एक तालिका में सूचीबद्ध उन है और मैं इस तालिका के अंतिम स्तंभ उन चेक बॉक्स होना चाहते हैं: मैं एक फार्म वर्ग जो इस तरह दिखता है बनाया। मुझे अपने नाम के आधार पर फ़ील्ड को एक-एक करके प्रस्तुत करना होगा। मैं एक टेम्पलेट टैग कि जरूरत प्रपत्र तत्व के HTML कोड वापसी होगी बनाने की कोशिश की:
<form action="" method="post">
{% csrf_token %}
<table class="listtable">
<tr>
<th>Username</th>
<th>Select</th>
</tr>
{% for u in userlist %}
<tr>
<td>{{u.username}}</td>
<td>{{select_form|user_select_field:u.id}}</td>
</tr>
{% endfor %}
</table>
<p><input type="submit" value="make actions" /></p>
बहरहाल, यह करने के लिए उन विगेट्स बाध्य नहीं करता है:
#in templatetags/user_list_tags.py
from django import template
register = template.Library()
#this is django template tag for user selection form
@register.filter
def user_select_field(form, userid):
"""
returns UserSelectionForm field for a user with userid
"""
key = std(userid)
if key not in form.fields.keys():
print 'Key %s not found in dict' % key
return None
return form.fields[key].widget.render(form, key)
अंत में, यहाँ टेम्पलेट कोड है फॉर्म और इस प्रकार, फॉर्म जमा करने के बाद, सत्यापन विफल रहता है। त्रुटि संदेश कहता है कि सभी कस्टम फ़ील्ड आवश्यक हैं। तो यहाँ मेरे सवालों हैं:
सही तरीके से अलग प्रपत्र फ़ील्ड्स रेंडर करने के लिए क्या है?
चेकबॉक्स के साथ ऐसा फॉर्म बनाने का सही तरीका क्या है? (मैं शायद मतलब मेरी विधि बेवकूफ है और वहाँ प्राप्त करने मैं क्या चाहते हैं की एक बहुत आसान तरीका है।
शायद आपको इसे थोड़ा जावास्क्रिप्ट के साथ करने का प्रयास करना चाहिए। – unni
मैं इस चरण में अपने प्रोजेक्ट में जावास्क्रिप्ट का उपयोग नहीं करना चाहता था। हालांकि, मुझे वास्तव में क्या करना चाहिए? या मुझे क्या गूगल चाहिए? आप जानते हैं कि मैं एक विशाल जावास्क्रिप्ट समर्थक नहीं हूं =) –