我使用Django 1.7和factory_boy来创建一些模型。这是代码:
在models.py中:
class Address(models.Model):
first_line = models.CharField(max_length=50, blank=True)
second_line = models.CharField(max_length=50, blank=True)
city = models.CharField(max_length=30, blank=True)
state = models.CharField(max_length=2, blank=True)
zipcode = models.CharField(max_length=5, blank=True)
zipcode_ext = models.CharField(max_length=4, blank=True)
在factories.py(相同目录)中的关联工厂:
class AddressFactory(factory.django.DjangoModelFactory):
class Meta:
model = Address
first_line = "555 Main St."
second_line = "Unit 2"
city = "Chicago"
state = "IL"
zipcode = "60606"
zipcode_ext = "1234"
现在,在django shell中给出这段代码:
>>> from models import Address
>>> from django.forms.models import modelform_factory
>>> AddressForm = modelform_factory(Address)
>>> from factories import AddressFactory
>>> a = AddressFactory.create()
>>> af = AddressForm(instance = a)
>>> af.is_valid()
False
出于某种原因,对is_valid的调用似乎总是返回false,我无法弄清楚原因。表单上似乎没有任何错误,而clean(),clean_fields()和validate_unique()似乎都没有在实例上引发错误。
为什么is_valid总是返回false?
答案 0 :(得分:1)
这与factory_boy无关。如果表单没有任何数据,那么表单总是无效的。 instance
参数用于填充表单的初始数据以供显示,并确定用于更新的对象ID,但不用于在POST上设置该数据。
我不太确定你要对那里的表单做什么,但你需要将它转换为POST字典并将其传递给表单的data
参数,以使其有效。< / p>