使用factory_boy创建的模型

时间:2015-04-28 06:42:22

标签: python django modelform factory-boy

我使用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?

1 个答案:

答案 0 :(得分:1)

这与factory_boy无关。如果表单没有任何数据,那么表单总是无效的。 instance参数用于填充表单的初始数据以供显示,并确定用于更新的对象ID,但不用于在POST上设置该数据。

我不太确定你要对那里的表单做什么,但你需要将它转换为POST字典并将其传递给表单的data参数,以使其有效。< / p>