Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 使用backbone.js将外键传递到服务器_Django_Backbone.js_Foreign Keys - Fatal编程技术网

Django 使用backbone.js将外键传递到服务器

Django 使用backbone.js将外键传递到服务器,django,backbone.js,foreign-keys,Django,Backbone.js,Foreign Keys,我有一个使用django和tastypie的服务器和一个使用backbone.js的基于web的客户端应用程序,我可以读取数据,但当我尝试添加带有外键的新模型,然后进行同步时,问题就出现了 所以我认为最简单的方法是调用collection.create,它会自动与服务器同步。如果我在没有外键的桌子上这样做,效果会很好。但是,当我有一个在服务器数据库上具有关系的模型时,我不知道应该如何指定外键 型号外键最初采用以下格式:/api/v1/porttype/4/ 如果我尝试构建这样的字符串,我会得到一

我有一个使用django和tastypie的服务器和一个使用backbone.js的基于web的客户端应用程序,我可以读取数据,但当我尝试添加带有外键的新模型,然后进行同步时,问题就出现了

所以我认为最简单的方法是调用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错误来看,添加时似乎没有发送非空字段,但不确定


救命啊

为什么不在模型中设置外键,然后在JSON负载中发送?例如:

不要以这种方式传递引用:

collection.create([ { 'project': '/api/v1/porttype/4/', 'name': 'test'} ]);
相反,您只需在服务器端将请求作为另一个参数进行处理

在主干方面,我会将上述内容更改为:

collection.create([ { 'project_id': 4, 'name': 'test'} ]);
其中project_id是项目表的外键引用


然后,在控制器代码中,您需要让ORM处理其余部分。我将此作为练习留给读者:-)

在本例中,“项目”是外键,我尝试以从服务器获得的相同格式发送它,即“/api/v1/porttype/4/”,但我返回了一个错误。。。我正在粘贴问题中从服务器上获得的stacktrace我也尝试只发送int,如上所述,但仍然得到相同的错误您不应该传递完整的URI,只传递一个整数引用ID。查看编辑我自己的答案我还没有设法解决这个问题,但是,我发现对一个新模型调用“save”而不是对集合调用“create”,并使用“project”:{pk:4}是有效的。这将有助于查看您的模型和资源。