2012-07-19 65 views
0

我使用的是django和dajax,我试图验证具有多对多字段的项目。我正在使用django表单为这个模型创建表单。当我使用提交按钮提交表单并且在选择框中至少选择了1到x个项目时,模型会得到验证。当我使用dajax时,只有在选择了至少2个选择框中的项目时,模型才会生效。Django Dajax验证多对多字段的模型

有谁知道为什么会发生这种情况?

型号

#Hints 
class Hint(models.Model): 
title = models.TextField(max_length=200) 
body = models.TextField() 
industryType = models.ManyToManyField(IndustryType) 
screen = models.ManyToManyField(Screen) 

#Creates form for a hint 
class HintForm(ModelForm): 

class Meta: 
    model = Hint 
    #widgets = {'industryType': CheckboxSelectMultiple, 'screen': CheckboxSelectMultiple } 
    industryType = ModelMultipleChoiceField(queryset=IndustryType.objects.all(), 
               widget=CheckboxSelectMultiple()) 

模板:

<form id="hintForm" action="." method="post"> 

{% csrf_token %} 
<table> 
{{ form.as_table }} 
</table> 
<input type="submit" value="Submit"/> 
</form> 

<input type="button" onclick="send_form();" value="Add Hint" /> 

<script> 
function send_form(){ 
    data = $('#hintForm').serializeObject(); 

    // jQuery 
    // If you are using jQuery, you need this form->object serializer 
    // https://github.com/cowboy/jquery-misc/blob/master/jquery.ba-serializeobject.js 
     alert(data['screen']) 
     Dajaxice.THE.send_form(Dajax.process,{'hintform':data}); 
     return(false) 
} 

</script> 

代码在浏览

def addHint(request): 
if request.method == 'POST': # If the form has been submitted... 
    form = HintForm(request.POST) # A form bound to the POST data 
    if form.is_valid(): # All validation rules pass 
     # Process the data in form.cleaned_data 
     #savedHint = form.save() 
     #messages.success(request, '{0} has been added.'.format(savedHint)) 
     print "Success" 
else: 

    form = HintForm() # An unbound form 

return render_to_response('manage/screens/form.html', { 
    'form': form, 'breadcrumName' : 'Add Screen' }, context_instance=RequestContext(request)) 

AJAX.py

@dajaxice_register 
def send_form(request, hintform): 
    dajax = Dajax() 
    form = HintForm(hintform) 
    print form 
    if form.is_valid(): 

     dajax.alert("This form is_valid") 
    else: 

     dajax.alert("Not Valid") 
    return dajax.json() 

回答

0

我在使用Dajax序列化表单数据时遇到了问题,直到我切换到不同的序列化对象函数。我知道这不是一个全面的测试,并回答你的问题,但你可以给这个备用序列化功能的镜头:

https://github.com/danheberden/serializeObject

也许也做一些萤火/控制台输出为您的序列化形式对象,以确定/它是如何被消灭的。

干杯

+0

感谢toasterleavings,新的serializeObject脚本解决了我的问题! – mikes000 2012-07-23 14:12:29

+0

我遇到了一个问题,如果只选择了一个,复选框就无效。我有一个验证问题:“输入值的列表。” – mikes000 2012-10-09 17:44:23

+0

我通过改变serializeObject来解决它:http://jsfiddle.net/sy3d4/ – mikes000 2012-10-09 17:49:52