私は基本的なDjango ModelFormの作成/検証/保存操作を行っています。私のカスタムクリーンメソッドは、Eclipseデバッガの下でコードを実行しているときにis_valid()が呼び出されていて、フォームの作成とis_valid()への呼び出しの後にブレークポイントを設定しても呼び出されません。Django ModelFormはクリーンではない
Djangoベースコードを何度もトレースしており、ModelFormクラスのエラーディクショナリが[なし]に設定されていないことが確認されます。これは、変数ペインに表示するModelFormの_errors属性にアクセスするデバッガとのやりとりが原因であると考えられます。
すべてのブレークポイントを削除してコードを自然に流すと、print文を発行してカスタムクリーンコードが実行されていることを証明できます。
これはEclipseの問題であるDjango ModelFormの設計上の欠陥ですか、間違ったツリーを吠えていますか?
models.py
from django.db import models
class TestModel1(models.Model):
field1 = models.CharField(max_length=45)
field2 = models.IntegerField(default=2)
field3 = models.CharField(max_length=45, null=True, blank=True)
forms.py
from order.models import TestModel1
from django.forms import ModelForm
class OrderTestForm(ModelForm):
def clean_field1(self):
return self.cleaned_data['field1']
def clean_field2(self):
return self.cleaned_data['field2']
class Meta:
model = TestModel1
私のテストハーネス:
from forms import OrderTestForm
row = {'field1': 'test value', 'field2': '4', }
ff = OrderTestForm(row)
#ff.full_clean()
if ff.is_valid():
ff.save()
else:
print ff.errors
試してみてください:FF = OrderTestForm(データ=行
あり、通常のフォームとこれが動作しない原因となるモデルの形の違いは、おそらくですが、このハックは、(代わりに
clean(...)
のis_valid()
をオーバーライド)は私のために働きました) – Brandon提案していただきありがとうございます。私はそれを変えずに試みました。私は少し問題を少しはっきりさせるべきです。 ModelFormの作成とSTEPでEclipseのブレークポイントを取得してから再開すると、クリーンのブレークポイントは起動されません。しかし、私はその最初の一歩を踏み出した後に、クレンズの中のどんな印刷ステートメントも印刷されます。これは、EclipseがModelFormオブジェクトにアクセスしてその属性を読み込もうとすると、それがきれいになることを意味します。これは、Djangoのドキュメントによると予想される動作です。ただし、is_valid()が正しく動作しないため、問題が発生します。 –
完全なテストケースを投稿できますか? – Brandon