如何在Django窗体中显示隐藏的autofield

2024-09-29 22:28:08 发布

您现在位置:Python中文网/ 问答频道 /正文

默认情况下,使用表单集显示的Django autofield是隐藏的。最好的展示方式是什么?在

目前,模型声明为

class MyModel:
   locid = models.AutoField(primary_key=True)
   ...

当使用Django formsets呈现时

^{pr2}$

它在页面上显示为

<input id="id_form-0-locid" type="hidden" value="707" name="form-0-locid"/>

谢谢。在


编辑

我这样创建表单集-

LocFormSet = modelformset_factory(MyModel) 
pformset = LocFormSet(request.POST, request.FILES, queryset=MyModel.objects.order_by('name')) 

第二次编辑

看起来我没有使用我在那里定义的自定义窗体类,所以这个问题需要稍作修改。。在

如何从自定义窗体(将显示隐藏字段)创建窗体集以及使用自定义查询集?

目前,我可以从BaseModelFormSet类继承并使用自定义查询集,也可以使用ModelForm类将自定义字段添加到表单。有没有一种方法可以同时使用表单集?在


第三次编辑

我现在正在使用

class MyModelForm(ModelForm):
  def __init__(self, *args, **kwargs):
    super(MyModelForm, self).__init__(*args, **kwargs)
    locid = forms.IntegerField(min_value = 1, required=True)
    self.fields['locid'].widget.attrs["type"] = 'visible'
    self.queryset = MyModel.objects.order_by('name')
  class Meta:
    model = MyModel
    fields = ('locid', 'name')

LocFormSet = modelformset_factory(MyModel, form = MyModelForm)
pformset = LocFormSet()

但这仍然没有

  • 显示locid
  • 使用指定的自定义查询。在

Tags: djangonameselfformidtrue编辑表单
3条回答

尝试更改默认字段类型:

from django import forms
class MyModelForm(ModelForm):
  locid = forms.IntegerField(min_value=1, required=True)
  class Meta:
    model = MyModel
    fields = ('locid', 'name')

编辑:已测试并有效。。。在

正如您所说,您没有使用您定义的自定义表单。这是因为你没有把它传给任何地方,所以Django不能知道。在

解决方案很简单-只需将自定义窗体类传递到modelformset_工厂:

LocFormSet = modelformset_factory(MyModel, form=MyModelForm) 

编辑响应更新3:

首先,在错误的地方重新定义了locid—它需要在类级别,而不是__init__内部。在

其次,将queryset放入form中根本不会起任何作用-forms不知道querysets。您应该回到之前的操作,在实例化formset时将其作为参数传入。(或者,您可以定义一个自定义的formset,但这似乎有点过头了。)

^{pr2}$

好吧,上面的方法都不适合我。最后,我从模板方面解决了这个问题。在

待展示。这是一个补丁,可以使用“patch-p0”安装在django的SVN版本中文件.patch““

  • 记住,那个{{表格.locid.value}}变量将与不可见表单一起使用,否则表单集的提交和保存操作将崩溃。

  • 这与{{表格.locid.data}}-如上述罚单所述。

相关问题 更多 >

    热门问题