小编Cra*_*rog的帖子

Django - annotate-clause 中的相等性检查

在我的 Django 1.9 项目中,我试图输出如下内容:

return MyModel.objects.values(...).\
               annotate(flg = ExpressionWrapper(F('rgt') - F('lft') > 0, 
                        output_field = BooleanField()))
Run Code Online (Sandbox Code Playgroud)

这会产生AttributeError: 'bool' object has no attribute 'resolve_expression'错误。

我尝试使用Case-when语法重写它:

return MyModel.objects.values(...)\
              .annotate(flg = Case(When(F('rgt') - F('lft') > 0, then = True, 
               output_field = BooleanField())))
Run Code Online (Sandbox Code Playgroud)

这一次,我以TypeError: __init__() takes either a Q object or lookups as keyword arguments错误告终。我搞不清楚了。有任何想法吗 ?

django

8
推荐指数
2
解决办法
1536
查看次数

通过 FCM 令牌从 Django 向 GCM 发送通知

我正在做 Django-Android 交互的第一步,我对 FCM 技术如何工作的逻辑有点困惑。我已经通过 pip 安装了 django-fcm,现在我的目标是通过 FCM 令牌向 Android 设备发送通知,该令牌已由 Android 设备通过 REST 资源发送到服务器。

第三方 Android 开发人员告诉我他们只会给我 FCM 令牌,我应该能够发送通知。我对文档中的以下代码片段感到有些困惑

devices = FCMDevice.objects.all()
Run Code Online (Sandbox Code Playgroud)

什么是FCM设备?以及示例中的 JSON 代码如何:

{
        "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
        "notification" : {
          "body" : "great match!",
          "title" : "Portugal vs. Denmark",
          "icon" : "myicon"
        }
    }
Run Code Online (Sandbox Code Playgroud)

...与此相关:

device = FCMDevice.objects.all().first()
device.send_message("Title", "Message")
device.send_message(data={"test": "test"})
device.send_message(title="Title", body="Message", icon=..., data={"test": "test"})
Run Code Online (Sandbox Code Playgroud)

问题是将最简单的通知发送到由其 FCM 令牌标识的 Android 设备的最少代码片段什么

django google-cloud-messaging firebase-cloud-messaging

6
推荐指数
1
解决办法
5853
查看次数

Django - 在 for 循环中使用 include 标签对页面加载速度的影响

这个问题很可能会被禁止,因为在我看来,这个论坛似乎是一个询问“为什么它不起作用”类型问题的网站,而不是“做我所做的事情是一个好主意”的网站。然而,我非常关心在我的代码中保持 DRY 性。

我有一个 Django 模板,如下所示:

<ol id = 'task_list'>
    {% for item in qs %}
        {% include 'list_item.html' with item=item %}
    {% endfor %}
</ol>
Run Code Online (Sandbox Code Playgroud)

列表项.html:

<li>
   {{item}}
</li>
Run Code Online (Sandbox Code Playgroud)
  • 这段代码的优点(至少对我来说):当我有一个 ajax 代码发布创建列表新项目的请求并随后将它们呈现在客户端时,它会对 DRYness 产生积极影响:

JS:

$.post('my_view_url', function(response)
    $('#container').append(response);
Run Code Online (Sandbox Code Playgroud)

姜戈视图:

def my_view(response)
   #... 
   return render_to_response('list_item.html',....)
Run Code Online (Sandbox Code Playgroud)

这样,list_item.html可以帮助我使用相同的 HTML 代码来初始呈现现有元素和客户端呈现新创建的项目。

  • 缺点{% include %}速度相当慢。

问题是:在对大量数据进行分页呈现的情况下,此代码模式是否不会成为性能杀手?

附加说明:

AFAIK,{% block %} 比 {% include %} 更快。但我不知道如何使用block.

django

5
推荐指数
0
解决办法
419
查看次数

Django - 使用 bulk_create 复制和插入查询集克隆

我的目标是创建一个查询集的克隆,然后将其插入到数据库中。按照这篇文章的建议,我有以下代码:

qs_new = copy.copy(qs)
MyModel.objects.bulk_create(qs_new)
Run Code Online (Sandbox Code Playgroud)

但是,使用此代码我遇到了duplicate primary key错误。至于现在,我只能想出以下解决方法:

qs_new = copy.copy(qs)
for x in qs_new:
   x.id = None
MyModel.objects.bulk_create(qs_new)
Run Code Online (Sandbox Code Playgroud)

问题:我可以在不经过循环的情况下实现此代码片段吗?

django

4
推荐指数
1
解决办法
2042
查看次数

Django 令牌授权 - 通过覆盖获取验证令牌类自定义获取_jwt_token

我的目标是覆盖obtain_jwt_token以更好地控制程序的返回值,在文档中我只发现了一个关于如何执行此操作的奇怪而粗略的信息:

请注意,默认的 acquire_auth_token 视图明确使用 JSON 请求和响应,而不是在您的设置中使用默认的渲染器和解析器类。如果您需要一个自定义版本的获取_auth_token 视图,您可以通过覆盖获取验证令牌视图类来实现,并在您的 url conf 中使用它

至于现在,我的尝试是这样的:

urlpatterns = [
   url(r'^api-token-auth/', my_customized_view),
]

class Foo(ObtainAuthToken):
    def post(self):
       # here goes my customized code

my_customized_view = Foo.as_view()
Run Code Online (Sandbox Code Playgroud)

赔率是我的代码看起来很愚蠢,而我只是失去了尝试谷歌它。我在 Djagno 方面的经验很少,所以请帮我解决这个问题!

django-rest-auth

4
推荐指数
1
解决办法
2536
查看次数