【发布时间】:2014-05-09 05:58:11
【问题描述】:
我在 django 管理器中的内联中添加了一些验证,如果模型实例上的字段不存在,则不会保存内联。如果还没有截止日期,我不希望添加额外的截止日期:
class DeadlineInlineFormset(forms.models.BaseInlineFormSet):
def clean(self):
super(DeadlineInlineFormset, self).clean()
# make sure deadline is set
if not self.instance.deadline:
raise ValidationError(_("Doesn't validate"))
class DeadlineInline(admin.StackedInline):
model = AdditionalDeadline
formset = DeadlineInlineFormset
class GrantAdmin(admin.ModelAdmin):
...
inlines = [DeadlineInline]
...
这工作正常,但我正在努力对其进行单元测试。到目前为止,我有:
class GrantAdminTestCase(TestCase):
fixtures = [...]
def test_forms(self):
# create the form from a model instance.
# it should validate but it doesn't
g = Grant.objects.first()
form = GrantAdminForm(instance=g)
self.assertEqual(form.is_valid(), True)
# remove deadline and add additional deadlines
# It shouldn't be valid because deadline is None
g.deadline = None
g.additional_deadlines.add(
Deadline(deadline=datetime.now())
)
self.assertEqual(form.is_valid(), False)
即使模型实例有效,第一个断言也会失败。第二个断言通过但不应该通过,因为它现在应该是无效的。 所以肯定有问题。
我也不确定这是否是正确的方法。在模型中进行验证会更容易吗?或者甚至在表单而不是表单集?
编辑:很多都是错误的,我已经更改了一些东西,但仍然无法正常工作:
def test_forms(self):
g = Grant.objects.first()
form = GrantAdminForm(model_to_dict(g))
self.assertEqual(form.is_valid(), True)
DeadlineFormSet = inlineformset_factory(Grant, Deadline)
# should be invalid
g.deadline = None
g.additional_deadlines.add(Deadline(deadline=datetime.now()))
formset = DeadlineFormSet(instance=g)
self.assertEqual(formset.is_valid(), False)
# should be valid
g = Grant.objects.first()
formset = DeadlineFormSet(instance=g)
self.assertEqual(formset.is_valid(), True)
前两个断言通过,但最后一个没有。
【问题讨论】:
标签: python django unit-testing django-admin