簡體   English   中英

django 表單集中的只讀字段

[英]Readonly fields in django formset

我正在使用模型集工廠從模型字段生成表單集。 在這里,我只想將查詢集對象設為只讀,將其他(額外形式)設為非只讀字段

我怎樣才能做到這一點?

  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 插件將表單動態添加到表單集

我建議指定一個用於模型的表單,在該表單中您可以設置您想要只讀的任何屬性。

#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)

只需要檢查實例是否有 id,就像這樣:
if self.instance.id

在將其設置為只讀之前

您還可以放入模板:

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

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

我很久以前使用過python。 希望這會有所幫助 但是如果您希望使用 jquery 控制字段顯示

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

或者

$('#id').attr('readonly', true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM