我有许多django表格,我将请求作为kwarg传递。
我刚开始深入测试,似乎需要请求作为参数的测试表单使测试更加困难。因为我必须以某种方式创建一个请求,我不能在没有它的情况下测试我的表单。
那么最好是避免将请求传递给表单吗?还是另一种解决方法? 我在第一时间这样做的原因是有时我需要request.user或request.session并根据表单中的信息进行一些清理/设置。
更新
这是一个示例形式:
class OrderForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
self.user = self.request.user
def clean(self):
# Here I have some cross session-field validation
if self.request.session['has_response'] and self.cleaned_data('status') == 'NEW':
raise ValidationError()
def save(self, commit=False):
self.instance.user = self.user
return super(OrderForm, self).save(commit=True)
class Meta:
model = Order
fields = ('address', 'city', 'status', ) # more fields
视图代码很简单:
form = OrderForm(request.POST, request=request)
Order模型还有一个带有一些验证逻辑的clean()方法。 在用户登录期间,会话最多填充。 我需要会话/用户。
但最重要的是,问题 - 将请求和会话传递给表单是不是一个糟糕的设计,考虑测试此表单的选项?当表单保存对象时,我发现它更合乎逻辑,包括request.user。但也许我应该尝试在表单和视图之间进行拆分?
答案 0 :(得分:1)
如果您需要在menubar
方法中将请求传递给表单。您可以在这样的测试中使用请求/会话/用户:
clean()
应该大致了解你可以做什么,而不是专门测试。