8

我正在使用 modelformset 工厂从模型字段生成表单集。在这里,我只想将查询集对象设为只读,将其他(额外形式)设为非只读字段

我怎样才能做到这一点?

  AuthotFormSet = modelformset_factory(Author, extra=2,)
  formset = AuthorFormSet(queryset=Author.objects.all())

在上面的表单集中,我想将所有查询集对象显示为只读,并将剩余的额外表单显示为非只读字段。我怎样才能做到这一点?

如果我用过,

      for form in formset.forms:
          form.fields['weight'].widget.attrs['readonly'] = True

这会将所有表单(包括额外的)字段转换为我不想要的只读字段。而且我正在使用 jquery 插件将表单动态添加到表单集

4

4 回答 4

13

我建议指定一个用于模型的表单,在该表单中,您可以设置您想要只读的任何属性。

#forms.py
class AuthorForm(forms.ModelForm):
    class Meta:
        model = Author

    def __init__(self, *args, **kwargs):
        super(AuthorForm, self).__init__(*args, **kwargs)
        if self.instance.id:
            self.fields['weight'].widget.attrs['readonly'] = True

#views.py
AuthorFormSet = modelformset_factory(Author, extra=2, form=AuthorForm)
于 2012-07-03T14:59:56.037 回答
0

只需要检查实例是否有 id,如下所示:
if self.instance.id

在将其设置为只读之前

于 2020-03-26T16:40:42.197 回答
0

您也可以放入您的模板:

{{form.management_form}}
{% for i in form %}
<p>{{ i.instance.readonly_field }}</p>
{{i.as_p}}
{% endfor %}

而不是将 readonly_field 放在 ModelForm.Meta.fields 中。

于 2021-04-24T12:34:23.697 回答
-2

我很久以前就用过python。希望这会有所帮助。但是,如果您希望使用 jquery 控制字段显示

$('.class').attr('readonly', true);

或者

$('#id').attr('readonly', true);
于 2012-07-03T14:57:34.723 回答