Django obj_create在我的表单验证之前运行

时间:2013-10-18 15:40:58

标签: python django tastypie

在TastyPie中obj_create在我的表单验证之前运行,它似乎被跳过,为什么?

我的代码

class AccountCreateResource(ModelResource):
    class Meta:
        queryset = CompanyUser.objects.all()
        resource_name = 'accounts/create'
        allowed_methods = ['post']
        validation = FormValidation(form_class=UserCreationForm)

    def obj_create(self, bundle, request=None, **kwargs):

        CompanyUser.objects.create_user(email=bundle.data['email'],
                                            company=bundle.data['company'],
                                            password=bundle.data['company'])

1 个答案:

答案 0 :(得分:5)

您正在执行obj_create覆盖错误obj_create还应处理数据验证。如果您查看源代码here,您会看到调用self.save(bundle)方法。除其他外,该方法调用运行验证器的is_valid方法。在您的情况下,obj_create方法可能如下所示:

def obj_create(self, bundle, **kwargs):
    bundle.obj = CompanyUser()
    bundle = self.full_hydrate(bundle)
    bundle.obj.password = bundle.data['company']
    return self.save(bundle)

请注意,由于您的资源为ModelResourcefull_hydrate会为您bundle.obj设置必要的属性。重要的是致电self.save(bundle)返回结果。

如果确实想要使用CompanyUser.objects.create_user(),请尝试使用此代码:

def obj_create(self, bundle, request=None, **kwargs):
    bundle.obj = CompanyUser.objects.create_user(email=bundle.data['email'],
                                                 company=bundle.data['company'],
                                                 password=bundle.data['company'])
    self.is_valid(bundle)
    if bundle.errors:
        raise ImmediateHttpResponse(response=self.error_response(bundle.request, bundle.errors))
    return bundle