2015-04-28 30 views
0

我使用Django 1.7和factory_boy創建一些模型。下面的代碼:Django 1.7 modelform_factory表單始終無效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相關的工廠(相同的目錄):給這個代碼在Django的殼

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" 

現在:

>>> 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

您可以打印執行is_valid後的實例和af表單嗎?嘗試使用FACTORY_FOR代替MetaClass ='your_appname.Address' –

回答

1

這與factory_boy無關。如果他們沒有任何數據,表單總是無效的,而你的數據不是。參數instance用於填充表單的初始數據以供顯示,並確定用於更新的對象ID,但不用於在POST上設置該數據。

我不太清楚你想用這個表單做什麼,但是你需要把它轉換成一個POST字典,並將它傳遞給表單的data參數使其有效。

+0

哦,廢話,不知道我怎麼沒有意識到這一點。謝謝! –