Django:使用 Model-Mommy 测试自定义 ModelForm 的 'clean' 方法
Django: Testing the 'clean' method of a custom ModelForm using Model-Mommy
======= 更新 =======
@JF 提出了在 ModelForms 中使用 model mommy 的绝妙视角。
使用以下代码,我设法为模型的所有字段自动生成随机数据,除了我想操作的字段。
tests.py:
from django.test import TestCase
from houses.forms import ManForm
from houses.models import Man
class ModelsTest(TestCase):
def test_Man(self):
man = mommy.make('Man', age=20)
data = {each_field.name: getattr(man, each_field.name) for each_field in man._meta.fields}
data.update({'age_verification': 20})
form = ManForm(data)
self.assertTrue (form.is_valid())
models.py
from django.db import models
class Man(models.Model):
name = models.CharField(max_length = 12)
age = models.PositiveSmallIntegerField()
forms.py:
from my_app.models import Man
from django import forms
from django.core.exceptions import ValidationError
class ManForm(forms.ModelForm):
age_verification = forms.IntegerField()
def clean(self):
if not self.cleaned_data['age'] == self.cleaned_data['age_verification']:
raise ValidationError("Is this a LIE?")
class Meta:
model = Man
fields = ['name', 'age', 'age_verification']
暂时我是这样测试的:
tests.py:
from django.test import TestCase
from houses.forms import ManForm
class ModelsTest(TestCase):
def test_Man(self):
data = {
'name' = 'John',
'age' = 20,
'ege_verification' = 20,
}
form = ManForm(data)
有没有提供表单随机数据的工具?
或者...我可以为此目的使用模型的 available tools 吗?
搜索支持者的文档Python 3,我不明白这是如何实现的。
唯一明确提供此类服务的是 Django-Whatever,它不 python3 兼容。
你可以这样做:
from model_mommy import mommy
class ModelsTest(TestCase):
def test_Man(self):
man = mommy.make('Man', _fill_optional=True)
data = {
'name': man.name,
'age': man.age,
'age_verification': man.age_verification,
}
form = ManForm(data)
如果您不想键入每个属性的名称,您可以这样做:
from model_mommy import mommy
from django.forms import model_to_dict
class ModelsTest(TestCase):
def test_Man(self):
man = mommy.make('Man')
data = model_to_dict(man)
form = ManForm(data)
======= 更新 =======
@JF 提出了在 ModelForms 中使用 model mommy 的绝妙视角。
使用以下代码,我设法为模型的所有字段自动生成随机数据,除了我想操作的字段。
tests.py:
from django.test import TestCase
from houses.forms import ManForm
from houses.models import Man
class ModelsTest(TestCase):
def test_Man(self):
man = mommy.make('Man', age=20)
data = {each_field.name: getattr(man, each_field.name) for each_field in man._meta.fields}
data.update({'age_verification': 20})
form = ManForm(data)
self.assertTrue (form.is_valid())
models.py
from django.db import models
class Man(models.Model):
name = models.CharField(max_length = 12)
age = models.PositiveSmallIntegerField()
forms.py:
from my_app.models import Man
from django import forms
from django.core.exceptions import ValidationError
class ManForm(forms.ModelForm):
age_verification = forms.IntegerField()
def clean(self):
if not self.cleaned_data['age'] == self.cleaned_data['age_verification']:
raise ValidationError("Is this a LIE?")
class Meta:
model = Man
fields = ['name', 'age', 'age_verification']
暂时我是这样测试的:
tests.py:
from django.test import TestCase
from houses.forms import ManForm
class ModelsTest(TestCase):
def test_Man(self):
data = {
'name' = 'John',
'age' = 20,
'ege_verification' = 20,
}
form = ManForm(data)
有没有提供表单随机数据的工具? 或者...我可以为此目的使用模型的 available tools 吗? 搜索支持者的文档Python 3,我不明白这是如何实现的。
唯一明确提供此类服务的是 Django-Whatever,它不 python3 兼容。
你可以这样做:
from model_mommy import mommy
class ModelsTest(TestCase):
def test_Man(self):
man = mommy.make('Man', _fill_optional=True)
data = {
'name': man.name,
'age': man.age,
'age_verification': man.age_verification,
}
form = ManForm(data)
如果您不想键入每个属性的名称,您可以这样做:
from model_mommy import mommy
from django.forms import model_to_dict
class ModelsTest(TestCase):
def test_Man(self):
man = mommy.make('Man')
data = model_to_dict(man)
form = ManForm(data)