我怎样才能摆脱“我的”呢;id";在Django Tastypie中使用额外_操作时的参数?

我怎样才能摆脱“我的”呢;id";在Django Tastypie中使用额外_操作时的参数?,django,tastypie,Django,Tastypie,我正在使用Django Tastypie构建RESTful API。我习惯于有更多的动作。当我将http\u方法作为GET传递时,我会得到一个id字段,在某些情况下我需要它,但在某些情况下我不需要它,因为我想在某些情况下获得所有结果,在某些情况下获得特定的过滤结果 因此,当我需要所有结果时,id参数不应该存在。当我需要过滤结果时,它应该在那里(它已经在那里了)。所以,我的问题是,当我需要所有结果时,如何删除id字段 那里写着 如果资源类型被声明为“list”,那么端点将不会在uri或参数列表中包

我正在使用Django Tastypie构建RESTful API。我习惯于有更多的动作。当我将
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
关系与另一个字段相关,这意味着我需要向该字段提供一个值列表。但它不需要列表,而是需要字符串值本身。我已上载屏幕截图本身。请让我知道这个黑客。谢谢。