小编uta*_*ngo的帖子

我应该以任何方式避免Django中的多表(具体)继承吗?

许多有经验的开发人员建议不要使用Django多表继承,因为它的性能很差:

  1. Django的疑难杂症:混凝土继承雅各布·卡普兰,莫斯,Django的一个核心因素.

    几乎在所有情况下,抽象继承是一种长期更好的方法.我看到在混凝土继承引入的负载下,有很多网站被粉碎,所以我强烈建议Django用户在大量怀疑的情况下使用具体的继承.

  2. Django中的两勺丹尼尔·格林菲尔德(@pydanny)

    多表继承,有时称为"具体继承",作者和许多其他开发人员认为这是一件坏事.我们强烈建议不要使用它.

    不惜一切代价,每个人都应该避免多表继承,因为它会增加混乱和大量开销.而不是多表继承,在模型之间使用显式OneToOneFields和ForeignKeys,以便您可以控制何时遍历连接.

但是没有多表继承,我不能轻易

  1. 另一个模型中的参考基础模型(必须使用GenericForeignKey或反向依赖);

  2. 获取基本模型的所有实例.

    (随意添加更多)

那么Django中这种继承有什么问题?为什么明确的OneToOneField更好?

性能对JOIN的影响有多大?有没有显示性能差异的基准测试?

不会select_related()让我们连接被调用时控制?


我已经将具体示例移到了一个单独的问题,因为这个问题变得过于宽泛,并且添加了使用多表继承的原因列表.

django inheritance models concrete-inheritance multi-table-inheritance

40
推荐指数
4
解决办法
7026
查看次数

为什么Django会为help_text和verbose_name更改进行迁移?

当我更改help_textverbose_name运行任何模型字段并运行时python manage.py makemigrations,它会检测到这些更改并创建新的迁移,例如0002_xxxx.py.

我正在使用PostgreSQL,我认为这些更改与我的数据库无关(我想知道这些更改是否存在相关的DBMS).

为什么Django会为此类更改生成迁移?有没有选择忽略它们?

我可以手动安全地删除0002_xxxx.py上次迁移(0001_initial.py)的更改0002_xxxx.py吗?

有没有办法自动更新以前的迁移?

python django database-migration django-1.7 django-1.9

39
推荐指数
3
解决办法
4708
查看次数

Django REST框架中的每字段权限

我正在使用Django REST Framework来序列化Django模型.我有一个ListCreateAPIView视图列出对象和一个RetrieveUpdateDestroyAPIView视图来检索/更新/删除单个对象.该模型存储用户自己提交的信息.他们提交的信息包含一些私人信息和一些公共信息.我希望所有用户能够列出和检索公共信息,但我只希望所有者列出/检索/更新/删除私人信息.因此,我需要每个字段的权限而不是对象权限.

我找到的最接近的建议是https://groups.google.com/forum/#!topic/django-rest-framework/FUd27n_k3U0,它会根据请求类型更改序列化程序.这对我的情况不起作用,因为我当时没有查询集或对象来确定它是否归用户所有.

当然,我的前端隐藏了私人信息,但聪明的人仍然可以窥探API请求以获取完整的对象.如果需要代码,我可以提供它,但我的请求适用于vanilla Django REST Framework设计.

django django-rest-framework

32
推荐指数
4
解决办法
9561
查看次数

Django F表达式加入了字段

所以我试图通过运行以下代码来更新我的模型:

FooBar.objects.filter(something=True).update(foobar=F('foo__bar'))
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

FieldError: Joined field references are not permitted in this query
Run Code Online (Sandbox Code Playgroud)

如果F表达式不允许这样做...我怎样才能实现此更新?

鉴于这张票中的信息,我现在明白这是不可能的,永远不会在django中实现,但有没有办法实现这个更新?也许有一些解决方法?我不想使用循环,因为有超过1000万个FooBar对象,所以SQL比python快得多.

python sql django

26
推荐指数
3
解决办法
4096
查看次数

MySql到PostgreSql的迁移

我的PostgreSQL安装在Windows上.如何将数据从MySQL数据库迁移到PostgreSQL?我读过大量的aricles.什么都没有帮助:(

谢谢.

我的行动:

  1. mysql转储:

    mysqldump -h 192.168.0.222 --port 3307 -u root -p --compatible=postgresql synchronizer > c:\dump.sql
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在pgsql上创建db同步器

  3. 进口转储:

    psql -h 192.168.0.100 -d synchronizer -U postgres -f C:\dump.sql
    
    Run Code Online (Sandbox Code Playgroud)
  4. 输出:

    psql:C:/dump.sql:17: NOTICE:  table "Db_audit" does not exist, skipping
    DROP TABLE
    psql:C:/dump.sql:30: ERROR:  syntax error at or near "("
    ?????? 2:  "id" int(11) NOT NULL,
               ^
    psql:C:/dump.sql:37: ERROR:  syntax error at or near ""Db_audit""
    ?????? 1:LOCK TABLES "Db_audit" WRITE;
                 ^
    psql:C:/dump.sql:39: ERROR:  relation "Db_audit" does not exist
    ?????? 1:INSERT INTO "Db_audit" VALUES (4068,4036,4,1,32,'2010-02-04 …
    Run Code Online (Sandbox Code Playgroud)

mysql migration postgresql dump

21
推荐指数
3
解决办法
4万
查看次数

pycharm在启动时总是"将pycharm helpers"上传到同一个远程python解释器

当我启动PyCharm for remote python interpreter时,它总是执行"Uploading PyCharm helpers",即使远程机器IP是相同的并且已经包含以前上传的帮助程序.行为是否正确?

python remote-debugging pycharm

18
推荐指数
2
解决办法
6201
查看次数

在Django中返回AJAX请求的表单错误

我一直在寻找Django和jQuery的方法.我在Django中构建了一个基本表单.在单击提交时,我正在使用jQuery向服务器发出AJAX请求以发布我的数据.这一点似乎工作正常,我已设法保存数据.当表单无效时,Django返回ValidationError.谁能告诉我如何返回这组错误消息作为对我的AJAX请求的响应,所以我可以轻松地使用JS迭代它并做任何事情?

我找到了这个片段.查看JS位(processJson),您会看到他似乎通过从响应HTML中提取错误消息来获取错误消息.这对我来说似乎有些愚蠢.这是最好的方式吗?

我对任何模糊的道歉.

提前致谢.

django ajax jquery django-forms

15
推荐指数
2
解决办法
2万
查看次数

如何推迟Celery任务的执行?

我有一个小脚本,将任务排入队列.此脚本生成大量数据库查询以获取应入队的项目.我面临的问题是,芹菜工人一旦被剧本排队就开始接收任务.这是正确的,这是芹菜应该工作的方式,但这往往导致我的脚本和芹菜工人之间的僵局.

有没有办法可以从脚本中排除我的所有任务,但延迟执行直到脚本完成或直到固定的时间延迟?

我在芹菜或django-芹菜的文件中找不到这个.这可能吗?

目前作为一个快速修复我想到将要处理的所有项目添加到列表中,当我的脚本完成所有查询后,我可以简单地遍历列表并将任务排队.也许这会解决问题,但是当你有数千个物品入队时,这可能是一个坏主意.

python django celery django-celery

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

如何避免使用Django,nginx和uWSGI将环境变量放入多个位置?

我正在尝试配置nginx + uWSGI来为我的Django应用程序提供服务.

当我将环境变量放入myapp_uwsgi.ini:

uid = username
gid = username
env = DJANGO_SITE_KEY="..."
Run Code Online (Sandbox Code Playgroud)

它按预期工作.

但是,我的应用程序有一些管理命令,它们也应该可以访问我定义的环境变量.

如果我把环境变量放到/home/username/.bashrc:

export DJANGO_SITE_KEY="..."
Run Code Online (Sandbox Code Playgroud)

uWSGI不加载它们.

我试图将环境变量放入一个单独的文件中:

#!/bin/sh
export DJANGO_SITE_KEY="..."
Run Code Online (Sandbox Code Playgroud)

然后从两个调用它.bashrc:

. /home/username/environment
Run Code Online (Sandbox Code Playgroud)

并且myapp_uwsgi.ini:

exec-pre-app = . /home/username/environment
Run Code Online (Sandbox Code Playgroud)

在uWSGI日志中,我看到这一行:

running ". /home/username/environment" (pre app)...
Run Code Online (Sandbox Code Playgroud)

但我的Django应用程序无法访问环境变量os.environ.

我也曾尝试把export命令到preactivatevirtualenvwrapper的钩和使用virtualenv =uWSGI的设置,但它并没有太多的工作(我假设使用virtualenvwrapper命令喜欢当钩子才执行workon.

django nginx uwsgi

13
推荐指数
1
解决办法
6032
查看次数

如何在PyCharm进口?

PyCharm中有一个快捷方式可以转到当前模块中导入符号的位置吗?

我尝试了"Go To Declaration"但它转到另一个模块.

pycharm

10
推荐指数
1
解决办法
742
查看次数