小编Moh*_*miz的帖子

在Django Rest框架中更新JSONField

我目前对在django rest-framework中使用JSONField很熟悉,但是我找不到更新存储json中密钥的任何直接方法。过滤JSONField的方法有很多,取决于它的内部键,但是似乎没有办法从已存储的JSONField中更改,更新或删除键。但是似乎postgres可以对json键做一些修改,如这个答案所解释。

是否有任何功能可以对JSONFields进行修改。如果没有任何直接命令可以执行此操作,那么实现JSONField修改的最佳方法是什么?

编辑:

例如,如果我有一个这样的模型:

class Thing(models.Model):
    name = models.CharField()
    properties = JSONField()
Run Code Online (Sandbox Code Playgroud)

properties我存储这样的json:

{
"color" : "red",
"size" : "large",
"cost" : 1234
}
Run Code Online (Sandbox Code Playgroud)

然后,我想使用django命令将颜色更改为“绿色”。

django postgresql django-rest-framework

5
推荐指数
2
解决办法
4895
查看次数

在不复制的情况下为字符串使用外部缓冲区

假设我有一个函数const string&作为其输入,例如:

void foo(const string& s);
Run Code Online (Sandbox Code Playgroud)

然后我有一个内部缓冲区const char* buffer;,我知道它的大小.

我想如果我创建字符串内联,仍然会发生一个副本:

foo(string(buffer, n));
Run Code Online (Sandbox Code Playgroud)

但是没有必要复制缓冲区,因为所有东西都是常量,我只需要字符串类的功能而不是它创建的缓冲区.

我必须提到我不确定复制是否发生,但是查看字符串构造函数,所有人都说复制会发生.我不知道编译器优化是否可以理解这种情况,我找不到确定复制是否发生的方法.

有没有办法为字符串使用外部缓冲区,或者至少是确保复制发生与否的方法.我目前正在使用std字符串和c ++ 11.

c++ string c++11 string-view

3
推荐指数
1
解决办法
1274
查看次数

使用 forward_as_tuple 发送初始化列表

假设打击代码:

#include <map>

using namespace std;

int main(int argc, char *argv[])
{
  map<int, std::array<int, 2>> a;

  a.emplace(piecewise_construct,
            forward_as_tuple(1),
            forward_as_tuple({1, 2}));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想std::array使用初始化列表放置 a 。但我收到了这个错误:

foo.cc: In function ‘int main(int, char**)’:
foo.cc:13:36: error: too many arguments to function ‘std::tuple<_Elements&& ...> std::forward_as_tuple(_Elements&& ...) [with _Elements = {}]’
             forward_as_tuple({1, 2}));
                                ^
In file included from /usr/include/c++/4.8/bits/stl_map.h:63:0,
                 from /usr/include/c++/4.8/map:61,
                 from foo.cc:3:
/usr/include/c++/4.8/tuple:869:5: note: declared here
     forward_as_tuple(_Elements&&... __args) noexcept
     ^
Run Code Online (Sandbox Code Playgroud)

我知道有很多方法可以实现这一点,但我的问题是关于forward_as_tuple为什么它不简单地将初始化列表发送到的构造函数的错误行为std::array

我使用 c++11 和 g++-4.8.4。

c++11

3
推荐指数
1
解决办法
684
查看次数