我怎样才能摆脱“我的”呢;id";在Django Tastypie中使用额外_操作时的参数?
我正在使用Django Tastypie构建RESTful API。我习惯于有更多的动作。当我将我怎样才能摆脱“我的”呢;id";在Django Tastypie中使用额外_操作时的参数?,django,tastypie,Django,Tastypie,我正在使用Django Tastypie构建RESTful API。我习惯于有更多的动作。当我将http\u方法作为GET传递时,我会得到一个id字段,在某些情况下我需要它,但在某些情况下我不需要它,因为我想在某些情况下获得所有结果,在某些情况下获得特定的过滤结果 因此,当我需要所有结果时,id参数不应该存在。当我需要过滤结果时,它应该在那里(它已经在那里了)。所以,我的问题是,当我需要所有结果时,如何删除id字段 那里写着 如果资源类型被声明为“list”,那么端点将不会在uri或参数列表中包
http\u方法
作为GET传递时,我会得到一个id
字段,在某些情况下我需要它,但在某些情况下我不需要它,因为我想在某些情况下获得所有结果,在某些情况下获得特定的过滤结果
因此,当我需要所有结果时,id
参数不应该存在。当我需要过滤结果时,它应该在那里(它已经在那里了)。所以,我的问题是,当我需要所有结果时,如何删除id
字段
那里写着
如果资源类型被声明为“list”,那么端点将不会在uri或参数列表中包含{id}
参数。这适用于端点,如上面的示例,该端点跨多个项目过滤或执行操作。如果资源类型为ommitted,http方法为“GET”,那么端点将默认为“view”,并在uri和参数列表中包含一个{id}
参数
但这只是URI的情况,它仍然需要一个id字段,即使我将resource\u type
声明为list
以下是屏幕截图:-
当resource\u type
声明为list
时。看,URI中没有{id}
。但我希望字段中不应有id
资源类型声明为列表“>
我该怎么做
另外,我还面临另一个问题。我有一个字段通过ManyToManyField
关系与另一个字段相关,这意味着我需要向该字段提供一个值列表。但它不需要列表,而是需要字符串值本身。我已经上传了该字段本身的屏幕截图。请让我知道这个,谢谢
在这种情况下,installation\u id
是通过ManyToManyField
关联的。它显示了related
,但我希望它应该接受一个值列表(installation\u id
)。我该怎么做
为什么delete没有id?我的意思是它显示id,但没有输入任何内容的字段
实现
额外操作的方式
和列表
vs视图
类型都在映射.py中
这里有两个示例extra_actions
端点,一个描述搜索视图(list
),另一个是使用pk
参数进行竞价的POST端点
extra_actions = [
{
"name": "search",
"http_method": "GET",
"resource_type": "list",
"summary": "Search item listings",
"response_class": "ListView",
"fields": {
"query": {
"description": "Search terms"
}
},
},
{
"name": "bid",
"http_method": "POST",
"resource_type": "view",
"summary": "Bid on an item listing",
"fields": {
"name": {
"description": "Bid on an item"
},
"email": {
"description": "Bidder's email address"
},
"comments": {
"description": "Notes or comments about the bid"
},
"bid": {
"description": "Amount in USD or BTC"
}
}
}
]
出于兼容性原因,extra_actions
默认为view
,如mapping.py
中的build_extra_operation
函数下所示。参数是从下面复制的build_parameters_from_extra_action
生成的:
def build_parameters_from_extra_action(self, method, fields, resource_type):
parameters = []
if method.upper() == 'GET' or resource_type == "view":
parameters.append(self.build_parameter(paramType='path',
name=self._detail_uri_name(),
dataType='int',
description='ID of resource'))
for name, field in fields.items():
parameters.append(self.build_parameter(
paramType="query",
name=name,
dataType=field.get("type", "string"),
required=field.get("required", True),
description=force_unicode(field.get("description", "")),
))
return parameters
我认为在我处理这个问题的过程中有一个问题。检查是if-method.upper()=“GET”或resource\u-type==“view”:
而不是if-method.upper()=“GET”和resource\u-type==“view”:
或者越短越正确的if-resource\u-type==“view”:
我建议克隆一份回购协议副本,并在本地进行修改。我会仔细检查,看看修改后的检查结果会如何。我注意到,id
参数也在我的视图中按要求显示。我现在没有空时,但我想这是我的代码,所以我将启动此问题并返回几小时后检查一下。你能发布额外操作吗?看起来你发现了一个bug!请参阅下面我的答案,了解如何克隆回购协议并进行更改。我将在回购协议上为这一个打开一个问题。为此打开一个问题。我将尝试看看能做些什么。同时,如果你(或我)找到一个破解方法,请将其发布到这里或其他任何地方。谢谢,我面临另一个问题。我有一个字段通过ManyToManyField
关系与另一个字段相关,这意味着我需要向该字段提供一个值列表。但它不需要列表,而是需要字符串值本身。我已上载屏幕截图本身。请让我知道这个黑客。谢谢。