我有关于在Django中提交表单的问题。有两种形式,每种形式都有自己的数字插入到数据库中。Django AJAX异步调用一个URL
- Form1中:必须插入值1
- 窗体2:必须插入值2
这两种形式都在URL /kategorije/
。当我提交form1时,form1插入到值为1的数据库中,这没关系。但是当我提交form2时,form2插入值1.t是问题,我想用form2在数据库中插入值2。 我的代码如下所示:
models.py
class CategoryType(models.Model):
id = models.AutoField(primary_key=True)
type = models.CharField(max_length=255)
def __str__(self):
return self.type
class Category(models.Model):
id = models.AutoField(primary_key=True)
type_id = models.ForeignKey('CategoryType')
name = models.CharField(max_length=255)
def __str__(self):
return str(self.name)
forms.py
class NewCategory(forms.ModelForm):
name = forms.RegexField(regex=r'\w+', label=_('Naziv kategorije'),
widget=forms.TextInput(
{'class': 'form-control ', 'placeholder': 'Naziv kategorije', 'id': 'kategorija'}))
class Meta:
model = Category
fields = ('name',)
exclude = ('type_id',)
class NewServiceIn(forms.ModelForm):
name = forms.RegexField(regex=r'\w+', label=_('Naziv kategorije'),
widget=forms.TextInput(
{'class': 'form-control ', 'placeholder': 'Naziv kategorije', 'id': 'kategorija'}))
class Meta:
model = Category
fields = ('name',)
exclude = ('type_id',)
views.py
@login_required
@csrf_protect
@csrf_exempt
def CategoryNew(request):
template = 'category.html'
user_pk = request.user.id
org_name = OrganizationInfo.objects.filter(id=user_pk).values('name')[0]
error = ''
success = False
# Forms
if request.is_ajax():
form1 = NewCategory(request.POST or None)
if form1.is_valid():
a = form1.save(commit=False)
name = form1.cleaned_data['name']
if Category.objects.filter(name__exact=name).exists():
error = Category.objects.filter(name__exact=name).values('name')[0]
else:
a.type_id = CategoryType.objects.get(type='products')
a.save(name)
success = name
ajax_vars = {'success': success, 'error': error}
return HttpResponse(json.dumps(ajax_vars))
else:
form1 = NewCategory()
if request.is_ajax():
form2 = NewServiceIn(request.POST or None)
if form2.is_valid():
b = form2.save(commit=False)
name1 = form2.cleaned_data['name1']
if Category.objects.filter(name__exact=name1).exists():
error = Category.objects.filter(name__exact=name1).values('name')[0]
else:
b.type_id = CategoryType.objects.get(type='services')
b.save(name1)
success = name1
ajax_vars = {'success': success, 'error': error}
return HttpResponse(json.dumps(ajax_vars))
else:
form2 = NewServiceIn()
return render_to_response(template, dict(name=org_name, form1=form1, form2=form2),
context_instance=RequestContext(request))
ajax.js
/*Service*/
$('#service1').on('submit', function(){
var $form = $(this);
$.ajax({
type: "POST",
url: "/kategorije/",
data: $form.serialize(),
dataType: "json",
required: true,
success: function(response) {
if (!response.success) {
console.log(response.error.name);
$.niftyNoty({
type: 'info',
container : '#alertajme_ser',
html : '<h4 class="alert-title">Kategorija sa nazivom <strong>'+response.error.name+'</strong> već postoji!</h4><p class="alert-message">Promjenite naziv kategorije.</p><div class="mar-top"><button type="button" class="btn btn-info" data-dismiss="noty">Zatvorite notifikaciju</button></div>',
closeBtn : false,
timer : 5000
});
} else {
$.niftyNoty({
type: 'info',
container : '#alertajme_ser',
html : '<h4 class="alert-title">Kategorija sa nazivom <strong>'+response.success+'</strong> uspješno je kreirana!</h4><div class="mar-top"><button type="button" class="btn btn-info" data-dismiss="noty">Zatvorite notifikaciju</button></div>',
closeBtn : false,
timer : 5000
});
}
},
error: function(rs, e) {
$.niftyNoty({
type: 'info',
container : '#alertajme_ser',
html : '<h4 class="alert-title">Kategorija sa nazivom <strong>'+rs.responseText+"konj"+'</strong> već postoji!</h4><p class="alert-message">Promjenite naziv kategorije.</p><div class="mar-top"><button type="button" class="btn btn-info" data-dismiss="noty">Zatvorite notifikaciju</button></div>',
closeBtn : false,
timer : 5000
});
return false;
}
});
return false;
});
第二个Ajax服务是一样的,但是表单id不同。
template.html
<form id ="service1" action="" method="post">
<div class="modal fade" id="myModal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title modial_header" id="myModalLabel">Dodavanje kategorije usluga</h4>
<div id ="alertajme_ser" class="panel-alert"></div>
</div>
<div class="modal-body">
<div class="col-xs-12" style="padding-top:10px;">
{% csrf_token %}
<div class="form-group">
<label class="control-label">Naziv usluge<span class="example1">*</span></label>
{{ form2.name }}
</div>
</div>
</div>
<div class="modal-footer bottom_modial">
<button type="submit" class="btn btn_modial_main">SPREMI KATEGORIJU</button>
</div>
</div>
</div>
</div>
</form>
如果你能给我这个问题一些建议。也许我在forms.py的语句中做错了if。但不知道如何使这个作品。
谢谢你在这方面的解决方案,它的工作原理! @Daniel Roseman – marin