Django内联按条件设置只读字段

时间:2015-02-16 18:20:55

标签: python django

寻找这样的事情:

for field in inlinemodel:
    if field.obj.rm.id == '1':
        readonly.append(field.note)

模型是:

class Note(models.Model):
    rm = models.ForeignKey(Alias)
    note = models.TextField()

您可以理解,所有字段的名称都相似rmnote,在浏览器中看起来像note_set-1-note

1 个答案:

答案 0 :(得分:1)

根据我的理解,您尝试将django modelform 设置为只读/禁用的模型字段,具体取决于if(condition is true){ dothis(); }之类的语句

第1步。

首先必须通过继承django.forms.Field 来创建一个新的FormField类。

然后,您必须在覆盖表单字段类中创建 clean()函数,并为其添加条件语句。请参阅下面的示例

from django import forms.Field 
class MyCustomFormField(forms.Field):
      clean(self):
          if self.instance.is_disabled
               return self.instance.field
          else:
               return self.cleaned_data.get('field')

第2步。

然后在你表单中所有字段的循环中,当你有if语句时,只需添加它 modelform.fields['field_1'].widget.attrs['readonly'] = True禁用字段

`