小编aug*_*men的帖子

Django中的左外部反向select_related?

想象一下以下模型:

class Parent(Model):
    ...

class Child(Model)
    father = ForeignKey(Parent)
    ...
Run Code Online (Sandbox Code Playgroud)

有些父母有孩子,有些则没有孩子(他们不是真正意义上的父母,只是虚构的名字).

我想提出以下问题:我想列出所有的父母,如果他们有孩子,也请带孩子.这相当于Child表的左外连接,即:

select * from app_parent left join app_child on child_father_id=parent_id
Run Code Online (Sandbox Code Playgroud)

这样,当我在模板中调用Parent.child_set时,我不会在数据库中访问数十亿次.有没有办法做到这一点?谢谢

django left-join django-queryset django-select-related

28
推荐指数
3
解决办法
9304
查看次数

如何防止Django本地化模板中的ID?

我最近升级到Django 1.2.5,现在我遇到了本地化问题,特别是数字格式.例如,在某些模板中,我打印以下示例:

data-id="{{ form.instance.id }}"
Run Code Online (Sandbox Code Playgroud)

在> = 1000的情况下,用于评估:

data-id="1235"
Run Code Online (Sandbox Code Playgroud)

但现在它实际上导致了(我的本地化是pt-BR,我们的小数点分隔符是点):

data-id="1.235"
Run Code Online (Sandbox Code Playgroud)

当我以后通过ID查询数据库时,当然找不到.使用|safe过滤器可以解决问题,但我不愿意在所有模板中找到所有ID并保护它们.

通常,我只会定位浮点数,而不是整数.我不想禁用L10N,因为所有其他格式都正常工作.有没有办法在Django本地化中做出这种区分?接受任何其他解决方案.

django localization django-templates

13
推荐指数
3
解决办法
3002
查看次数

如何从只读目录中安装包?

我正在尝试安装位于已安装目录中的 Python(C 扩展,如果重要的话)包,出于安全原因,该包是只读的。但是,默认情况下,pip 会在其自己位置调用的子目录中构建包build,但我不能这样做。

$ pip install /mnt/remote/pkgname
Processing /mnt/remote/pkgname
  Preparing metadata (setup.py) ... done
Using legacy 'setup.py install' for pkgname, since package 'wheel' is not installed.
Installing collected packages: pkgname
  Attempting uninstall: pkgname
    Found existing installation: pkgname 1.0.0
    Uninstalling pkgname-1.0.0:
      Successfully uninstalled pkgname-1.0.0
    Running setup.py install for pkgname ... error
    ERROR: Command errored out with exit status 1:
     command: /path/to/venv/bin/python3.8 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/mnt/remote/pkgname/setup.py'"'"'; __file__='"'"'/mnt/remote/pkgname/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if …
Run Code Online (Sandbox Code Playgroud)

python pip python-c-api

9
推荐指数
1
解决办法
1216
查看次数

如何防止Django测试服务器中的HTTP 304

我在Django有几个项目,偶尔在一个和另一个之间交替.所有这些都有一个/ media/path,由django.views.static.serve提供,它们都有一个/media/css/base.css文件.

问题是,每当我运行一个项目时,对base.css的请求都会返回HTTP 304(未修改),可能是因为时间戳没有改变.但是当我运行另一个项目时,返回相同的304,使浏览器使用前一个项目缓存的文件(因此,使用错误的样式表).

仅供记录,以下是中间件类:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
)
Run Code Online (Sandbox Code Playgroud)

我总是使用默认地址http:// localhost:8000.还有其他解决方案(除了使用不同的端口 - 8001,8002等)?

django caching http-status-code-304

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

如何从上次错误/失败中恢复 Django 测试套件?

我有一个大型测试套件(1000 多个测试),总共运行 3-4 分钟,或者直到弹出第一个错误(使用 运行--failfast)。当测试失败并修复它时,我想从该测试开始并继续运行其他测试。(我知道更改可能会影响之前的测试,但每次都运行它们似乎很浪费)

查看python manage.py test --help,我看不到从上次失败开始运行测试套件的选项。如何做呢?

testing django

6
推荐指数
0
解决办法
1095
查看次数

作为 JSON 字段的子查询

使用假设的模式:

CREATE TABLE obj (id INT, name VARCHAR);
CREATE TABLE objprop (obj_id INT, key VARCHAR, value VARCHAR);
INSERT INTO obj VALUES
    (1, 'Object 1'),
    (2, 'Object 2'),
    (3, 'Object 3');
INSERT INTO objprop VALUES
    (1, 'created', '2020-02-16'),
    (1, 'updated', '2020-02-28'),
    (2, 'created', '2020-02-01');
Run Code Online (Sandbox Code Playgroud)

我能否获取对象列表(每行一个)以及表示对象属性的 JSON 字段?

我知道我可以使用ARRAY()带有子查询的函数来检索值数组,例如:

SELECT id, name, ARRAY(SELECT value FROM objprop where obj_id=id) values FROM obj;

+----+----------+------------------------------+
| id | name     | values                       |
+----+----------+------------------------------+
| 1  | Object 1 | {'2020-02-16', '2020-02-28'} |
| …
Run Code Online (Sandbox Code Playgroud)

postgresql subquery

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

dir()中hasattr()和'attribute'之间有什么区别?

例如:

>>> s = 'string'
>>> hasattr(s, 'join')
True
>>> 'join' in dir(s)
True
Run Code Online (Sandbox Code Playgroud)

Python文档说,hasattr实现调用getattr并查看它是否引发异常.然而,这导致了很大的开销,因为丢弃了所获得的值并且可能引发异常.

问题是,如果呼叫'attribute' in dir(obj)意味着同一件事,它是否更快,更安全,还是在特定场合可能失败?

python

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

带有缩写的spacy分割句子

当有缩写点时,spaCy 会错误地分割句子。

import spacy
tool = spacy.load('en')
x = tool('It starts at 9:00 a.m. Eastern Standard Time.')
list(x.sents)
Run Code Online (Sandbox Code Playgroud)

产生两个句子而不是一个。我该如何正确地做到这一点?

python spacy

5
推荐指数
1
解决办法
1604
查看次数

Alembic - 如何获取单个修订版的sql脚本?

我正在尝试从alembic修订版生成SQL脚本,但是当我运行时:

alembic upgrade head --sql
Run Code Online (Sandbox Code Playgroud)

它输出所有修订版的SQL ,因为中间有一个破坏性的修订版(我还没弄清楚为什么),我从那时起就无法获得脚本.而且,我只想要最后一个版本的SQL脚本.

有没有参数可以得到它?

alembic

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

这些元素在 Python 模块中的顺序是什么?

如果存在,这些元素在 Python 模块中声明的顺序是什么?

  • 哈希爆炸 ( #!/usr/bin/env python)
  • 编码 ( # coding: utf-8)
  • 未来进口 ( from __future__ import unicode_literals, ...)
  • 文档字符串

如果最后声明,文档字符串会在调用中工作help(module)吗?

python

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

完成所有请求后如何在scrapy中执行最后一个请求?

在我构建的蜘蛛中,我需要登录网站才能开始执行请求(这很简单),然后我通过一个循环来执行数千个请求。

但是,特别是在这个网站上,如果我不退出,我会收到 10 分钟的惩罚,然后我才能再次登录。所以我尝试在循环完成后以较低的优先级注销,如下所示:

def parse_after_login(self, response):
    for item in [long_list]:
        yield scrapy.Request(..., callback=self.parse_result, priority=100)

    # After all requests have been made, perform logout:
    yield scrapy.Request('/logout/', callback=self.parse_logout, priority=0)
Run Code Online (Sandbox Code Playgroud)

但是,不能保证在其他请求完成处理之前注销请求不会准备好,因此过早注销将使其他请求无效。

我发现无法使用spider_closed信号执行新请求。

在所有其他请求完成后,如何执行新请求?

python scrapy

2
推荐指数
1
解决办法
1216
查看次数

如何在单层中按模对列表进行排序

我需要在一行中编写代码,该代码将显示一个排序的数组,在该数组上以负数为模(它们在屏幕上显示为负数)

例:

data = [4, -30, 100, -100, 123, 1, 0, -1, -4]
output:
[0, 1, -1, 4, -4, -30, 100, -100, 123]
Run Code Online (Sandbox Code Playgroud)
data = [4, -30, 100, -100, 123, 1, 0, -1, -4]

def is_module(x):
    if x < 0:
        return 0
    else:
        return 1

print(sorted([data[x] for x in range(len(data)) if is_module(data[x])]))
Run Code Online (Sandbox Code Playgroud)

我期望这样:

    [0, 1, -1, 4, -4, -30, 100, -100, 123]
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
69
查看次数