Django初心者です。
formsetを使用して複数レコードの登録・修正を行おうとしています。
レコードの内容を調べて、内容によってWidgetを変更したいと思っています。
具体的には、レコード修正の際、承認されたレコード(approval=True)は変更したくないのでreadonly指定を付けたいのですが、widgetで指定する場合に読み込んだformsetの内容からデータを確認したいのですが、どうしたらいいかわかりません。
該当のソースコード
Python
1models.py 2 3class Test(models.Model): 4 BOOL_CHOICES = ((False, '未承認'), (True, '承認')) 5 6 id = models.AutoField(primary_key = True) 7 title = models.CharField(max_length = 200, verbose_name = 'タイトル') 8 point = models.IntegerField(verbose_name = '点数') 9 approval = models.BooleanField(choices=BOOL_CHOICES, verbose_name = '承認') 10 date = models.DateTimeField(default = timezone.now, verbose_name = '登録日付') 11 12 13 14 forms.py 15 16class TestForm(forms.ModelForm): 17 18 class Meta: 19 model = Test 20 fields = ('id', 'title', 'point', 'approval') 21 22 def __init__(self, *args, **kwargs): 23 super().__init__(*args, **kwargs) 24 25 for field in self.fields.values(): 26 27 field.widget.attrs['class'] = 'form-control' 28 29TestnFormSet = forms.modelformset_factory(model = Test, form = TestForm, can_delete = True, extra = 5, max_num = 5)
試したこと
formの__init__でフォームデータから値を抜き出せないかと思ったのですがエラーとなります。
Python
1 def __init__(self, *args, **kwargs): 2 super().__init__(*args, **kwargs) 3 4 self.field['approval'] # これだとCharfieldが返ってきます 5 self.field['approval'].value # これはエラーになります 6 for field in self.fields.values(): 7 8 field.widget.attrs['class'] = 'form-control'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/06 23:54