标签: formset

这是Django formset验证中的错误吗?

手动示例: http://docs.djangoproject.com/en/1.0/topics/forms/formsets/#formset-validation(我正在使用Django 1.0.3在Google App Engine上运行)

码:

from django import forms
from django.forms.formsets import formset_factory

class ArticleForm1(forms.Form):
  title = forms.CharField()
  pub_date = forms.DateField()

class ArticleForm2(forms.Form):
  title = forms.CharField()

class ArticleForm3(forms.Form):
  title = forms.CharField()
  pub_date = forms.CharField()

ArticleFormSet1 = formset_factory(ArticleForm1)
ArticleFormSet2 = formset_factory(ArticleForm2)
ArticleFormSet3 = formset_factory(ArticleForm3)

data = {
 'form-TOTAL_FORMS': u'2',
 'form-INITIAL_FORMS': u'0',
 'form-0-title': u'',
 'form-0-pub_date': u'16 June 1904',
 'form-1-title': u'',                # <-- this title is missing but required
 'form-1-pub_date': u'16 June 1904', # <-- this date is missing but required …
Run Code Online (Sandbox Code Playgroud)

django validation django-forms formset

4
推荐指数
1
解决办法
3022
查看次数

在InlineFormset_factory中覆盖FileField小部件?

我想在inlineformset_factory表单中更改默认上载字段(FileField),以使用django.contrib.admin.widgets中的AdminFileWidget.这样做的目的是显示当前上传文件的路径,就像在管理表单中一样(也许还有另一种方法可以做到这一点?).

我可以毫不费力地使用自定义表单来使用窗口小部件,但是无法弄清楚如何在inlineformset_factory中更改窗口小部件.

django formset

4
推荐指数
1
解决办法
2678
查看次数

Django:缺少ManagementForm数据...... Formset不会验证.为什么?

出于某种原因,我提交后,我的formset将无法验证.关于这种方式的任何想法都可能发生?

#models.py

class Department(models.Model):
  department = models.CharField(verbose_name = "Department Name", max_length=100)
  description = models.TextField(verbose_name = "Description", blank=True, null=True)
  sp_description = models.TextField(verbose_name = "Description (Spanish)", blank=True, null=True)
  phone = PhoneNumberField()
  phone_ext = models.CharField(max_length=10, blank=True)

  #Relations
  provider = models.ForeignKey(Provider, blank=True, null=True)
  services_offered = models.ManyToManyField(ServiceType)

  def __unicode__(self):
    return self.department
Run Code Online (Sandbox Code Playgroud)

#view.py

def display_step5(request):
    msg = ''
    email = request.session.get('email')
    provider_obj = retrieve_provider_instance(email)
    AddDepartmentFormSet = inlineformset_factory(Provider, Department, extra=0)
    if is_authenticated(request):
        AddDepartmentFormSet = inlineformset_factory(Provider, Department, extra=0)
        if request.method=='POST':
            if 'add_department' in request.POST:
                cp = request.POST.copy()
                cp['department-TOTAL_FORMS'] …
Run Code Online (Sandbox Code Playgroud)

python django validation formset inline-formset

4
推荐指数
1
解决办法
6005
查看次数

在Django Formset中过滤对象

我使用inlineformset_factory来生成一个formset,如下所示:

FormSet = inlineformset_factory(Model1, Model2, extra=0)
if request.method =="POST":
    formset = FormSet(request.POST, instance=model1_object)
    if formset.is_valid():
        formset.save()
        return HttpResponseRedirect( reverse-blah )
else:
    formset = PupsFormSet(instance=model1_object,)
return render_to_response("template.html", {"formset":formset, 'model1_object':model1_object},context_instance=RequestContext(request)) 
Run Code Online (Sandbox Code Playgroud)

我有两个问题

  1. 如何限制Model2对象,以便不是所有适用的对象都存在,而只是过滤的子集?
  2. 有没有人有任何使用formset的基于类的视图的示例代码?

更新了功能代码回答问题#1

FormSet = inlineformset_factory(Model1, Model2, extra=0)
if request.method =="POST":
    formset = FormSet(request.POST, instance=model1_object, queryset=Model2.objects.filter(foo=bar))
    if formset.is_valid():
        formset.save()
        return HttpResponseRedirect( reverse-blah )
else:
    formset = PupsFormSet(instance=model1_object, queryset=Model2.objects.filter(foo=bar))
return render_to_response("template.html", {"formset":formset, 'model1_object':model1_object},context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

django django-forms formset django-class-based-views class-based-views

4
推荐指数
1
解决办法
3998
查看次数

提交表单不变时,Django表单集cleaned_data为空

关于Django 1.4和表单集,我一直遇到一个奇怪的问题:当提交的数据不变时,即使表单集本身通过了验证,表单集的cleaned_data字段也为空。

这是一个例子:

forms.py:

class NameForm(forms.Form):
    name = forms.CharField(required=False, initial='Foo')
Run Code Online (Sandbox Code Playgroud)

views.py:

def welcome(request):

    Formset = formset_factory(NameForm, extra=1)
    if request.method == 'POST':
        formset = Formset(request.POST)
        print '1.Formset is valid?', formset.is_valid()
        print '2.Formset', formset
        print '3.Formset cleaned_data', formset.cleaned_data
    else:
        formset = Formset()
    return render_to_response('template.html', locals())
Run Code Online (Sandbox Code Playgroud)

尽管它formset是有效的,并且实际上包含数据,但第3行将打印一个空字典的列表,除非我实际上已更改了该字段中的初始值。

这对我来说似乎很奇怪,但是我可能做错了什么。有什么帮助吗?

python django formset

4
推荐指数
1
解决办法
2771
查看次数

Django:如何使用formset extra更改标签?

我使用formset产生额外的字段,但是我不知道如何更改formset产生的额外字段的标签。

我的代码:

class GetMachine(forms.Form):
    Number_of_Lines = forms.IntegerField(max_value=4)

class GetLine(forms.Form):
    beamline_name = forms.CharField(max_length=15, label='Name of Beamline-%i')

def install(request):
    MachineFormSet = formset_factory(GetMachine, extra=1)
    formset = MachineFormSet()
    if request.method == 'POST':
#        formset = MachineFormSet(request.POST) 
#        if formset.is_valid(): # All validation rules pass
        line_no = request.POST['form-0-Number_of_Lines']
        GetLineFormSet = formset_factory(GetLine, extra=int(line_no))
        formset = GetLineFormSet()
        return render_to_response('install.html', { 'formset': formset, 'action': 'step1'})
    return render_to_response('install.html', { 'formset': formset, })    
Run Code Online (Sandbox Code Playgroud)

install.html模板:

{% for form in formset.forms %}
{% for field in form %}
    <tr>
        <td>{{ field.label_tag }}</td> …
Run Code Online (Sandbox Code Playgroud)

python django django-forms formset

4
推荐指数
1
解决办法
2561
查看次数

带有formset的django保存模型

我有以下视图代码

account = PatientAccount.objects.get(pk=account_id)
payments = Payments.objects.filter(account=account)
total_cost = 0
for hasjob in account.hasjobs.all().select_related('job'):
    total_cost += hasjob.quantity * hasjob.job.cost*(1.0 - hasjob.discount / 100.0)

PaymentFormset = modelformset_factory(Payments, form=PaymentModelForm, can_delete=False)
formset = PaymentFormset(request.POST or None, queryset=payments)

if request.method == 'POST':
    print formset.is_valid()
    if formset.is_valid():
        for form in formset:
            if form.is_valid():
                try:
                    if form.cleaned_data.get('DELETE') and form.instance.pk:
                        form.instance.delete()
                    else:
                        instance = form.save(commit=False)
                        print instance.pk
                        instance.account = account
                        print instance.account
                        instance.save()
                        messages.success(request, "Payments saved successfully")
                except DatabaseError:
                    messages.error(request, "Database error. Please try again")

                return redirect('job_management-edit', …
Run Code Online (Sandbox Code Playgroud)

django formset

4
推荐指数
1
解决办法
7114
查看次数

在formset验证时,ManagementForm数据丢失错误

views.py中的formset创建:

ffact = formset_factory(Form,extra=somenum]))
fset = ffact(prefix='pfix')
Run Code Online (Sandbox Code Playgroud)

views.py中的验证:

ffact = formset_factory(Form,extra=3))
fset = ffact(request.POST) 
if fset_is.valid():
    blah blah
Run Code Online (Sandbox Code Playgroud)

这导致异常类型:ValidationError at/app/index/Exception Value:[u'ManagementForm数据丢失或被篡改'] django-docs 确实提到了这一点.我不确定如何提供管理数据.我试着像这样,

try:
  fset = ffact(request.POST)
except ValidationError:
  fset = None
if fset and fset.is_valid():
  blah blah
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误.任何想法?谢谢.

django validation django-forms formset

3
推荐指数
2
解决办法
1万
查看次数

Django 表单集无效 - 为什么不呢?

我正在尝试使用一个表单来允许用户将图像上传到存储在我的 Django 项目的数据库中的项目,但是,我当前收到的控制台输出告诉我我formset正在使用的内容无效...

我尝试用来将图像上传到项目的视图已定义为:

def upload_budget_pdfs(request, project_id):
    project = Project.objects.get(id=project_id)
    print("Value of project in 'upload_budget_pdfs()': ", project)

    presentations = project.budget_versions.select_related('meeting').prefetch_related('budget_items', 'cci_items', 'presenters').filter(version_number__isnull=False).annotate(vn=F('version_number') * -1).order_by('presentation_date', 'created', '-vn')
    print("Value of presentations in 'upload_budget_pdfs()': ", presentations)
    drawing_formset = DrawingUploadFormset(prefix="drawings", queryset=Drawing.objects.filter(budget__in=presentations).order_by('budget__presentation_date', 'budget__created'))
    print("Value of drawing_formset in 'upload_budget_pdfs()': ", drawing_formset)

    if drawing_formset.is_valid():
        print 'Saving drawing_formset'
        print "Before", [b.id for b in project.budget_versions.all()]
        for drawing_form in drawing_formset:
            if drawing_form.instance.budget:
                print 'Instance', drawing_form.instance.budget
                drawing = drawing_form.save(commit=False)
                drawing.budget = drawing_form.instance.budget
                drawing.save()
            print drawing, [b.id for b …
Run Code Online (Sandbox Code Playgroud)

django formset

3
推荐指数
1
解决办法
5387
查看次数

动态添加 Django 表单集实例并使用 HTMX POST 的正确方法是什么?

我正在使用htmx i制作带有嵌套动态表单集的表单(想要逃避 usign JS,但如果别无选择...)来实例化更多表单集字段以制作动态嵌套表单,但是当我POST时,仅来自1 个实例(最后一个)的数据被 POSTed,表单的其余部分正确 POST,并且获取与Chlid formset Child modelParent model

我阅读了有关如何POST 表单集实例的django 文档,并尝试将其应用到我的代码中,我也知道如何同时发布这 两个实例。对于表单集,我正在向包含子表单集的部分模板发出 htmx get 请求hx-get ,效果很好,唯一的问题是这总是将表单集返回到客户端,因此对于POST数据会重复每个字段的次数,并且只获取最后一个实例中放置的数据,但是我尝试更改表单集上的值以使更多表单直立,这给出了预期的结果,每个表单一个子实例,所以我的问题是htmx以及我调用实例的方式。ParentChildform-0xextra=intextra=intnew Child formset

这是我的代码。(我计划在此表单中嵌套更多子表单集,因此为了方便起见,我将其称为sformset

****views.py****

def createPlan(request):#Requst for the Parent form 

    form = PlanForm(request.POST or None)
    sformset = StructureFormset(request.POST or None) #Nesting the Child formset

    context = { …
Run Code Online (Sandbox Code Playgroud)

django formset htmx

3
推荐指数
1
解决办法
1789
查看次数