我有两个模型:项目和专辑。他们之间只有一个单独的领域。在
相册/模型.py公司名称:
class Album(models.Model):
title = models.CharField(_('title'), max_length=128)
slug = models.SlugField(_('slug'), unique=True, default='main-gallery')
项目/模型.py在
^{pr2}$如果创建了一个项目,也会为它创建一个相册。这个很好用。但当我尝试在api中使用django Tastype创建一个时,它不会起作用:
class AlbumResource(ModelResource):
class Meta:
queryset = Album.objects.all()
resource_name = 'album'
#fields = ['title','slug',]
def dehydrate_resource_uri(self, bundle):
return bundle.data['slug']
class ProjectResource(ModelResource):
main_gallery = fields.OneToOneField(AlbumResource, 'main_gallery', related_name='project', full=False)
class Meta:
queryset = Project.objects.all()
resource_name = 'project'
fields = ['slug', 'title', 'main_gallery']
authorization= Authorization()
allowed_methods = ['get', 'post', 'put']
def obj_create(self, bundle, request=None, **kwargs):
logger.debug("obj_create Bundle %s" % bundle)
return super(ProjectResource, self).obj_create(bundle, request, created_by=request.user)
当Project
API端点上的“GET”起作用时,当我试图在“POST”上创建一个新的Project
时,我得到以下错误:
Traceback (most recent call last):
File "/Users/PATHvenv/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/Users/PATHvenv/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 77, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/PATHvenv/lib/python2.7/site-packages/tastypie/resources.py", line 192, in wrapper
response = callback(request, *args, **kwargs)
File "/Users/PATHvenv/lib/python2.7/site-packages/tastypie/resources.py", line 397, in dispatch_list
return self.dispatch('list', request, **kwargs)
File "/Users/PATHvenv/lib/python2.7/site-packages/tastypie/resources.py", line 427, in dispatch
response = method(request, **kwargs)
File "/Users/PATHvenv/lib/python2.7/site-packages/tastypie/resources.py", line 1165, in post_list
updated_bundle = self.obj_create(bundle, request=request, **self.remove_api_resource_names(kwargs))
File "/Users/PATH/path/path/apps/api/resources.py", line 70, in obj_create
return super(ProjectResource, self).obj_create(bundle, request, created_by=request.user)
File "/Users/PATHvenv/lib/python2.7/site-packages/tastypie/resources.py", line 1774, in obj_create
bundle = self.full_hydrate(bundle)
File "/Users/PATHvenv/lib/python2.7/site-packages/tastypie/resources.py", line 698, in full_hydrate
value = field_object.hydrate(bundle)
File "/Users/PATHvenv/lib/python2.7/site-packages/tastypie/fields.py", line 636, in hydrate
value = super(ToOneField, self).hydrate(bundle)
File "/Users/PATHvenv/lib/python2.7/site-packages/tastypie/fields.py", line 154, in hydrate
elif self.attribute and getattr(bundle.obj, self.attribute, None):
File "/Users/PATHvenv/lib/python2.7/site-packages/django/db/models/fields/related.py", line 343, in __get__
raise self.field.rel.to.DoesNotExist
DoesNotExist
原因是tastype在到达
pre_save
接收器之前失败。根据您粘贴的回溯,它在full_hydrate
中失败。这是因为默认情况下,main_gallery
是必需的,而不是给定的(因为您假设它将被创建)。在尝试将
blank=True, null=True
添加到相关问题 更多 >
编程相关推荐