Gra*_*ntU 3 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'])
Run Code Online (Sandbox Code Playgroud)
你正在做最obj_create重要的错误.obj_create还应该处理数据验证.如果你在这里查看源代码,你会看到一个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)
Run Code Online (Sandbox Code Playgroud)
请注意,由于您的资源是ModelResource,full_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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |