内联表单添加错误的形式 [英] Inline formset adding wrong form
本文介绍了内联表单添加错误的形式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我想添加
photo_form
实际上 doctors_form
被添加,但如果我交换 photo_form
fieldset和 doctor_form
html中的字段集 - 一切都很完美!有什么神奇的东西? forms.py
class InstitutionForm(forms.ModelForm):
class Meta:
model = Institution
fields ='__all__'
error_css_class ='error'
required_css_class ='required'
def __init __(self,* args,** kwargs):
super(InstitutionForm,self).__ init __(* args,** kwargs)
self.helper = FormHelper()
self.helper.form_tag = False
InstitutionDoctorsFormSet = inlineformset_factory(Institution,Doctor,form = InstitutionForm,extra = 1)
InstitutionPhotosFromSet = inlineformset_factory (Institution,Photo,form = InstitutionForm,extra = 1)
views.py
def institution_create(request):
if request.POST:
form = InstitutionForm(request.POST,request.FILES)
doctor_form = InstitutionDoctorsFormSet(request.POST,reque st.FILES)
photo_form = InstitutionPhotosFormSet(request.POST,request.FILES)
如果form.is_valid()和doctor_form.is_valid()和photo_form.is_valid():
form.save ()
doctor_form.instance = form.save()
doctor_form.save()
photo_form.instance = form.save()
photo_form.save()
return redirect('base:institutions_list')
else:
form = InstitutionForm()
doctor_form = InstitutionDoctorsFormSet()
photo_form = InstitutionPhotosFormSet()
args = {}
args.update(csrf(request))
args ['form'] = form
args ['doctor_form'] = doctor_form
args ['photo_form'] = photo_form
full_name = request.user.username
return render(request,'base / create_institution.html',localals())
html
< form CLA ss =the_formenctype =multipart / form-dataaction =。方法= POST >
{%csrf_token%}
{%crispy form%}
{%wysiwyg_editorid_services%}
{%wysiwyg_editorid_license_text%}
{%wysiwyg_editor id_schedule%}
< fieldset>
< legend>照片< / legend>
{{photo_form.management_form}}
{{photo_form.non_form_errors}}
{%for photo_form%}
{{form.id}}
< ; div class =inline {{photo_form.prefix}}>
{%crispy form%}
< / div>
{%endfor%}
< / fieldset>
< fieldset>
< legend>医生< / legend>
{{doctor_form.management_form}}
{{doctor_form.non_form_errors}}
{%for doctor_form%}
{{form.id}}
< ; div class =inline {{doctor_form.prefix}}>
{%crispy form%}
< br />
< br />
< / div>
{%endfor%}
< / fieldset>
< div class =text-center>
< input class =btn btn-defaulttype =submitname =submitvalue =Создать/>
< a class =btn btn-dangerhref =/ home />取消< / a>
< / div>
< / form>
我尝试删除脆弱的表单使用,但是所有内容都保持不变。
更新:
class Institution(models.Model):
pre>
category = models。 ForeignKey(Category,verbose_name =Категория)
logo = ResizedImageField(size = [320,320],crop = ['middle','center'],quality = 90,upload_to ='logos',verbose_name = Логотип)
name = models.CharField(max_length = 255,verbose_name =Название)
short_description = models.CharField(max_length = 255,verbose_name =Описание)
services = models.TextField(verbose_name =Услуги)
license_text = models.TextField(blank = True,verbose_name =Лицензия)
license_photo = models.ImageField(blank = True,verbose_name =Фотолицензии )
actions = models.CharField(max_length = 255,verbose_name =Акции)
schedule = models.TextField(max_length = 255,verbose_name =Ра
phone = models.CharField(max_length = 255,verbose_name =Телефон)
email = models.CharField(max_length = 255,verbose_name =Почта)
address = models .CharField(max_length = 255,verbose_name =Адрес)
coordinates = models.CharField(default =,max_length = 255,verbose_name =Координаты)
website = models.CharField(max_length = 255,verbose_name =Сайт)
class Meta:
verbose_name = uЗаведение
verbose_name_plural = uЗаведения
def __unicode __自己):
return self.name
class照片(models.Model):
photo = ResizedImageField(size = [600,600],crop = ['middle' 'center'],quality = 90,upload_to ='institution_photos',verbose_name =Фото)
rel_institution = models.ForeignKey(Institution)
class Meta:
verbose_name = uФото
verbose_name_plural = u ото
class Doctor(models.Model):
name = models.CharField(max_length = 255,verbose_name =ФИО)
doctor_photo = ResizedImageField(size = [400,600],crop = ['middle','center'],quality = 90,upload_to ='doctors_photos',verbose_name =Фото)
specs = models.CharField max_length = 1000,verbose_name =Специализация)
experience = models.CharField(max_length = 255,verbose_name =Стажработы)
制度= models.TextField(默认=,verbose_name =Режим работы)
doctor_to_home = models.BooleanField(verbose_name =Возможностьвызованадом)
rel_institution = models.ForeignKey(Institution)
class Meta:
verbose_name = uВрач
verbose_name_plural = uВрачи
def __unicode __(self):
return self.name
解决方案我发现ap roblem。这是脚本。没有
formCssClass
参数。
因此脚本应如下所示:code>< script type =text / javascript>
$(function(){
$(。inline。{{doctor_form.prefix}})。formset({
prefix:{{doctor_form.prefix}},
formCssClass:'dynamic-formset1'
});
$(。inline。{{photo_form.prefix}})。formset({
prefix:{{photo_form .prefix}},
formCssClass:'dynamic-formset2'
})
})
< / script>
I have a form and two inline formsets.
When I want to addphoto_form
actuallydoctors_form
is added, but if I swapphoto_form
fieldset anddoctor_form
fieldset in html - everything works perfectly! What magic is going on?!forms.py
class InstitutionForm(forms.ModelForm): class Meta: model = Institution fields = '__all__' error_css_class = 'error' required_css_class = 'required' def __init__(self, *args, **kwargs): super(InstitutionForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = False InstitutionDoctorsFormSet = inlineformset_factory(Institution, Doctor, form=InstitutionForm, extra=1) InstitutionPhotosFromSet = inlineformset_factory(Institution, Photo, form=InstitutionForm, extra=1)
views.py
def institution_create(request): if request.POST: form = InstitutionForm(request.POST, request.FILES) doctor_form = InstitutionDoctorsFormSet(request.POST, request.FILES) photo_form = InstitutionPhotosFormSet(request.POST, request.FILES) if form.is_valid() and doctor_form.is_valid() and photo_form.is_valid(): form.save() doctor_form.instance = form.save() doctor_form.save() photo_form.instance = form.save() photo_form.save() return redirect('base:institutions_list') else: form = InstitutionForm() doctor_form = InstitutionDoctorsFormSet() photo_form = InstitutionPhotosFormSet() args = {} args.update(csrf(request)) args['form'] = form args['doctor_form'] = doctor_form args['photo_form'] = photo_form full_name = request.user.username return render(request, 'base/create_institution.html', locals())
html
<form class="the_form" enctype="multipart/form-data" action="." method="post"> {% csrf_token %} {% crispy form %} {% wysiwyg_editor "id_services" %} {% wysiwyg_editor "id_license_text" %} {% wysiwyg_editor "id_schedule" %} <fieldset> <legend>Photos</legend> {{ photo_form.management_form }} {{ photo_form.non_form_errors }} {% for form in photo_form %} {{ form.id }} <div class="inline {{ photo_form.prefix }}"> {% crispy form %} </div> {% endfor %} </fieldset> <fieldset> <legend>Doctors</legend> {{ doctor_form.management_form }} {{ doctor_form.non_form_errors }} {% for form in doctor_form %} {{ form.id }} <div class="inline {{ doctor_form.prefix }}"> {% crispy form %} <br/> <br/> </div> {% endfor %} </fieldset> <div class="text-center"> <input class="btn btn-default" type="submit" name="submit" value="Создать"/> <a class="btn btn-danger" href="/home/">Cancel</a> </div> </form>
I tried to remove crispy form usage, but everythings is left same.
Update:
class Institution(models.Model): category = models.ForeignKey(Category, verbose_name="Категория") logo = ResizedImageField(size=[320, 320], crop=['middle', 'center'], quality=90, upload_to='logos', verbose_name="Логотип") name = models.CharField(max_length=255, verbose_name="Название") short_description = models.CharField(max_length=255, verbose_name="Описание") services = models.TextField(verbose_name="Услуги") license_text = models.TextField(blank=True, verbose_name="Лицензия") license_photo = models.ImageField(blank=True, verbose_name="Фото лицензии") actions = models.CharField(max_length=255, verbose_name="Акции") schedule = models.TextField(max_length=255, verbose_name="Расписание") phone = models.CharField(max_length=255, verbose_name="Телефон") email = models.CharField(max_length=255, verbose_name="Почта") address = models.CharField(max_length=255, verbose_name="Адрес") coordinates = models.CharField(default="", max_length=255, verbose_name="Координаты") website = models.CharField(max_length=255, verbose_name="Сайт") class Meta: verbose_name = u"Заведение" verbose_name_plural = u"Заведения" def __unicode__(self): return self.name class Photo(models.Model): photo = ResizedImageField(size=[600, 600], crop=['middle', 'center'], quality=90, upload_to='institution_photos', verbose_name="Фото") rel_institution = models.ForeignKey(Institution) class Meta: verbose_name = u"Фото" verbose_name_plural = u"Фото" class Doctor(models.Model): name = models.CharField(max_length=255, verbose_name="ФИО") doctor_photo = ResizedImageField(size=[400, 600], crop=['middle', 'center'], quality=90, upload_to='doctors_photos', verbose_name="Фото") specs = models.CharField(max_length=1000, verbose_name="Специализация") experience = models.CharField(max_length=255, verbose_name="Стаж работы") regime = models.TextField(default="", verbose_name="Режим работы") doctor_to_home = models.BooleanField(verbose_name="Возможность вызова на дом") rel_institution = models.ForeignKey(Institution) class Meta: verbose_name = u"Врач" verbose_name_plural = u"Врачи" def __unicode__(self): return self.name
解决方案I found a problem. It was in script. There was no
formCssClass
parameter.
So the script should look like this:<script type="text/javascript"> $(function () { $(".inline.{{ doctor_form.prefix }}").formset({ prefix: "{{ doctor_form.prefix }}", formCssClass: 'dynamic-formset1' }); $(".inline.{{ photo_form.prefix }}").formset({ prefix: "{{ photo_form.prefix }}", formCssClass: 'dynamic-formset2' }) }) </script>
这篇关于内联表单添加错误的形式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文