【发布时间】:2015-07-28 18:11:02
【问题描述】:
我正在使用tastepie 创建一个api。代码如下。我已经使用 ipdb 检查了代码。
class UserProfileResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'userprofiles'
excludes = ['password', 'is_active', 'is_staff', 'is_superuser']
filtering = {
'username': ALL,
}
class UserResource(ModelResource):
user = fields.ForeignKey(UserProfileResource, 'user', full=True)
class Meta:
queryset = User.objects.all()
resource_name = 'users'
list_allowed_methods = ['get','post']
allowed_methods = ['get', 'put', 'patch', 'delete']
authentication = ApiKeyAuthentication()
serializer = Serializer(formats=['json', 'jsonp', 'xml', 'yaml', 'html', 'plist'])
def post_list(self, request, **kwargs):
print 'post list method'
mandatory_fields = ['username', 'email', 'first_name', 'last_name', 'address', 'city', 'pin']
fields_apicall = request.GET.keys()
#import ipdb;ipdb.set_trace();
print request.POST
if set(mandatory_fields).issubset(fields_apicall):
print request.GET.keys()
create_object = True
else:
print 'NO'
err_dict = { 'error':'Mandatory Fields Missing.' }
return HttpResponse(json.dumps(err_dict))
def obj_create(self, bundle, **kwargs):
print 'obj_create() '
mandatory_fields = ['username', 'email', 'first_name', 'last_name', 'address', 'city', 'pin']
fields_apicall = bundle.data.keys()
# import ipdb;ipdb.set_trace();
if set(mandatory_fields).issubset(fields_apicall):
bundle.obj = self._meta.object_class()
else:
err_dict = { 'error':'Mandatory Fields Missing.' }
return HttpResponse(json.dumps(err_dict))
我想创建嵌套的用户对象,即用户对象和用户配置文件。为此,我必须确保所有字段都存在于json 中。我尝试覆盖 hydrate()、dehydrate() 和 post_list() 方法。其中只有post_list() 在发布请求中被调用。
我可以通过覆盖post_list() 方法来检查request json 中的fields,但这是检查缺失字段的好方法吗?我已经用谷歌搜索并浏览了许多 SO 帖子,但我没有发现任何帖子提到要覆盖 post_list() 以检查缺少的字段,其中一些人说要覆盖 hydrate()。还有必要重写obj_create() 方法来使用tastepie 创建对象吗?
【问题讨论】:
标签: django field tastypie missing-data