我有一台使用django和tastypie的服务器以及一个使用backbone.js的基于客户端网络的应用程序,我可以读取数据,但是当我尝试使用外键添加新模型然后同步时问题就出现了。< / p>
所以我认为最简单的方法是调用collection.create,它自动与服务器同步。如果我在没有外键的表上执行此操作,它可以正常工作。但是,当我有一个在服务器数据库上有关系的模型时,我不知道我是如何指定外键的。
模型外键最初采用以下格式:/api/v1/porttype/4/
如果我尝试构建这样的字符串,我会收到404错误,如果我尝试只发送一个int,我会收到404错误。
我不确定服务器的期望。我不确定这是否是一个配置问题......我现在有点迷失了。到目前为止,我做了类似的事情:
collection.create([ { 'project': '/api/v1/porttype/4/', 'name': 'test' } ]);
在这种情况下, project
将是外键。
编辑:我从服务器返回的堆栈跟踪:
{"error_message": "", "traceback": "Traceback (most recent call last)n\n File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 192, in wrapper\n response = callback(request, *args, **kwargs)\n\n File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 397, in dispatch_list\n return self.dispatch('list', request, **kwargs)\n\n File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 427, in dispatch\n response = method(request, **kwargs)\n\n File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 1165, in post_list\n updated_bundle = self.obj_create(bundle, request=request, **self.remove_api_resource_names(kwargs))\n\n File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 1774, in obj_create\n bundle = self.full_hydrate(bundle)\n\n File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 698, in full_hydrate\n value = field_object.hydrate(bundle)\n\n File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/fields.py\", line 636, in hydrate\n value = super(ToOneField, self).hydrate(bundle)\n\n File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/fields.py\", line 154, in hydrate\n elif self.attribute and getattr(bundle.obj, self.attribute, None)n\n File \"/Library/Python/2.7/site-packages/Django-1.3.2-py2.7.egg/django/db/models/fields/related.py\", line 301, in __get__\n raise self.field.rel.to.DoesNotExist\n\nDoesNotExist\n"}
似乎它无法识别它...而且从我搜索的这个django错误中,似乎发生了你在添加时不发送非空字段,但不确定
帮助!
答案 0 :(得分:0)
为什么不在模型中设置外键,然后在JSON有效负载中发送?例如:
不要以这种方式传递引用:
collection.create([ { 'project': '/api/v1/porttype/4/', 'name': 'test'} ]);
相反,您只需将服务器端的请求作为另一个参数处理。
在骨干方面,我会将上述内容改为:
collection.create([ { 'project_id': 4, 'name': 'test'} ]);
其中project_id是项目表的foreign_key引用
然后,在您的控制器代码中,您需要让ORM处理其余部分。我把它作为练习留给读者: - )