मैं Django 1.4 का उपयोग कर रहा हूं और मैं फॉर्मसेट्स के साथ संघर्ष कर रहा हूं। मैंने प्रलेखन और बहुत सारे प्रश्नों को पढ़ा है। मैं संकेतों से बाहर निकल रहा हूं कि वे वास्तव में कैसे काम करते हैं।डीजेगो फॉर्मसेट्स - कैसे एक फॉर्मेट सही तरीके से बनाने और इसे वैध करने के लिए?
- Fomsets इस तरह कॉन्फ़िगर/dclared किया जाना चाहिए?
मैंने फ़ॉर्म.py और views.py में फॉर्मेट कैसे सेट अप किया है।
forms.py: (मैं एक forms.Form घोषित किया है)
class BicycleAdItemKindPropertyValueForm(forms.Form):
bicycleaditemkindpropertyvalue = forms.ChoiceField()
views.py:
def submit_ad_view(request):
# This class is used to make empty formset forms required
class BicycleAdItemKindPropertyValueFormSet(BaseFormSet):
def __init__(self, *args, **kwargs):
super(BicycleAdItemKindPropertyValueFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
def clean(self):
pdb.set_trace()
for form in self.forms:
None
#form.fields['bicycleaditemkindpropertyvalue']
formsetBicycleAdItemKindPropertyValue = formset_factory(BicycleAdItemKindPropertyValueForm, formset=BicycleAdItemKindPropertyValueFormSet)
if request.method == 'POST':
model_main = Main()
model_main.section = Section.objects.get(pk=request.POST['section'])
model_main.user = request.user
model_bicyclead = BicycleAd()
model_bicyclead.bicycleadtype = BicycleAdType.objects.get(pk=2) #1-Ad Link, 2-Ad Insite. Em principio ficara pre-definido
model_bicyclead.bicycleaditemkind = BicycleAdItemKind.objects.get(pk=4)
model_bicyclead.bicycleadcondition = BicycleAdCondition.objects.get(pk=2)
model_bicyclead.city = GeonamesLocal.objects.get(pk=4803854)
# Build the forms
form_main = MainForm(request.POST, instance = model_main)
form_bicyclead = BicycleAdForm(request.POST, instance = model_bicyclead)
form_bicycleadcategory = BicycleAdCategoryForm(request.POST)
form_bicycleaditemkindselect = BicycleAdItemKindSelectForm(request.POST)
formset_bicycleaditemkindpropertyvalue = formsetBicycleAdItemKindPropertyValue(request.POST)
#pdb.set_trace()
if form_main.is_valid() and form_bicyclead.is_valid() and form_bicycleadcategory.is_valid() and form_bicycleaditemkindselect.is_valid() and formset_bicycleaditemkindpropertyvalue.is_valid():
main_f = form_main.save()
bicyclead_f = form_bicyclead.save(commit=False)
bicyclead_f.main = main_f
bicyclead_f.save()
bicycleadcategory_f = form_bicycleadcategory.save(commit=False, rel_obj=model_bicyclead)
else:
# Build the forms
form_main = MainForm()
form_bicyclead = BicycleAdForm()
form_bicycleadcategory = BicycleAdCategoryForm()
form_bicycleaditemkindselect = BicycleAdItemKindSelectForm()
formset_bicycleaditemkindpropertyvalue = formsetBicycleAdItemKindPropertyValue()
return render_to_response('app/submit/submit_ad.html', {'form_main': form_main, 'form_bicyclead': form_bicyclead, 'form_bicycleadcategory': form_bicycleadcategory, 'form_bicycleaditemkindselect': form_bicycleaditemkindselect, 'formset_bicycleaditemkindpropertyvalue': formset_bicycleaditemkindpropertyvalue}, context_instance=RequestContext(request))
इन दो पूर्ववर्ती चरणों सही हैं? स्वरूप सही ढंग से घोषित किया गया है?
अब, टेम्पलेट। मैं इस तरह की घोषणा की है:
sometemplate.html:
<form action="/submeter/anuncio/" method="post"><div style="display: none;"><input type="hidden" value="3TWjKpqnXG7afZcvF1YmmWcRBKnYqePB" name="csrfmiddlewaretoken"></div>
...
<div class="someclass">
<input type="hidden" id="id_form-TOTAL_FORMS" value="1" name="form-TOTAL_FORMS">
<input type="hidden" id="id_form-INITIAL_FORMS" value="0" name="form-INITIAL_FORMS">
<input type="hidden" id="id_form-MAX_NUM_FORMS" name="form-MAX_NUM_FORMS">
[]
<div class="item-bicycleaditemkindpropertyvalue">
<label for="id_form-0-bicycleaditemkindpropertyvalue">Some 0</label>
<select id="id_form-0-bicycleaditemkindpropertyvalue" name="form-0-bicycleaditemkindpropertyvalue">
...
</select>
</div><div class="item-bicycleaditemkindpropertyvalue">
<label for="id_form-1-bicycleaditemkindpropertyvalue">Some 1</label>
<select id="id_form-1-bicycleaditemkindpropertyvalue" name="form-1-bicycleaditemkindpropertyvalue">
...
</select>
</div>
<div class="item-bicycleaditemkindpropertyvalue">
<label for="id_form-2-bicycleaditemkindpropertyvalue">Some 2</label>
<select id="id_form-2-bicycleaditemkindpropertyvalue" name="form-2-bicycleaditemkindpropertyvalue">
...
</select>
</div>
</div>
<input type="submit">
</form>
यह उत्पादन सही है:
{{formset_bicycleaditemkindpropertyvalue.management_form}}
{{formset_bicycleaditemkindpropertyvalue.non_form_errors}}
{{formset_bicycleaditemkindpropertyvalue.errors}}
{% for form in formset_bicycleaditemkindpropertyvalue.forms %}
<div class="item-bicycleaditemkindpropertyvalue">
<label for="{{form.bicycleaditemkindpropertyvalue.auto_id}}"></label>
{{form.bicycleaditemkindpropertyvalue}}
</div>
जावास्क्रिप्ट की मदद से
, कोड कुछ इस तरह उत्पन्न होगा? ऐसा दिखना चाहिए?
- प्रमाणीकरण, फ़ॉर्मेट को वैध कैसे करें?
अब सत्यापन के बारे में। मैं अपने फार्म में एक forms.ChoiceField() है
class BicycleAdItemKindPropertyValueForm(forms.Form):
bicycleaditemkindpropertyvalue = forms.ChoiceField()
मैं पढ़ा है कि forms.ChoiceField() विकल्पों की एक सूची के खिलाफ मान्य किया जाना चाहिए। मेरा सवाल यह है कि मैं यह कैसे कर सकता हूं?
- कुछ जानकारी
डिबगिंग स्वच्छ में pdb (अजगर debuger)() मैं देख रहा हूँ मैं इस डेटा मिला का उपयोग करना:
class BicycleAdItemKindPropertyValueFormSet(BaseFormSet):
def __init__(self, *args, **kwargs):
super(BicycleAdItemKindPropertyValueFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
def clean(self):
pdb.set_trace()
for form in self.forms:
None
#form.fields['bicycleaditemkindpropertyvalue']
डिबगिंग self.data:
(Pdb) self.data
<QueryDict: {u'form-1-bicycleaditemkindpropertyvalue': [u'29'],
u'form-2-bicycleaditemkindpropertyvalue': [u'33'],
u'title': [u'adasd'],
u'form-MAX_NUM_FORMS': [u''],
u'country': [u'42'],
u'section': [u'5'],
u'item_kind': [u'4'],
u'form-INITIAL_FORMS': [u'0'],
u'bicycleadcategorytype': [u'3', u'2'],
u'csrfmiddlewaretoken': [u'3TWjKpqnXG7afZcvF1YmmWcRBKnYqePB'],
u'form-TOTAL_FORMS': [u'3'],
u'form-0-bicycleaditemkindpropertyvalue': [u'4']}>
डिबगिंग self.is_valid():
(Pdb) self.is_valid()
False
पर कोई सुराग मैं इस formset कैसे मान्य कर सकते हैं?
शुभकामनाओं सहित,
प्रपत्र मैं बदल दिया है में करने के लिए "bicycleaditemkindpropertyvalue = forms.CharField (विजेट = फॉर्म। चयन करें()) "और अब मैं साफ कर सकता हूं। धन्यवाद। –