小编use*_*805的帖子

Django管理命令和argparse

我正在尝试使用argparse创建一个Django管理命令,但是每当我运行它时,它总是不会返回有效的选项,因为此消息来自manage.py:

class Command(BaseCommand):
    def handle(self, *args, **options):
        parser = argparse.ArgumentParser('Parsing arguments')
        parser.add_argument('--max', type=float, store)
        args = parser.parse_args(sys.argv[2:])
Run Code Online (Sandbox Code Playgroud)

将一些参数解析器与管理命令一起使用的正确方法是什么?

Python版本2.x.

python django

7
推荐指数
2
解决办法
4369
查看次数

Django - 更改验证器名称会导致迁移回溯

我将 Django 1.9.2 与 python 3.4.2 一起使用。

在开发生命周期的前半部分,我有以下代码:

class ModificationOrder(ERN):
...
    san_amount = models.IntegerField(default=0, \
    validators=[validate_modificationorder_san_amount])
Run Code Online (Sandbox Code Playgroud)

,我创建了一个初始迁移,导致0001_initial.py文件中的这一行:

migrations.CreateModel(
    ...
    fields = [
        ...
        ('san_amount', models.IntegerField(default=0, validators=[shop.validators.validate_modificationorder_san_amount])),
    ])
Run Code Online (Sandbox Code Playgroud)

. 后来我进行了几次迁移,并从模型中删除了san_amount字段,但这可能与我的问题无关。

现在我尝试将验证器的名称更改为validate_resource_san_amount,但更改后 runserver 导致此错误:

python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f8ec1a5a510>
Traceback (most recent call last):
  File "/home/csa.virtualenvs/sccdb34/lib/python3.4/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
  File "/home/csa/.virtualenvs/sccdb34/lib/python3.4/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run …
Run Code Online (Sandbox Code Playgroud)

django django-validation django-migrations

7
推荐指数
2
解决办法
1063
查看次数

将 Q 对象与变量一起使用

我想以查询项来自变量的方式使用 django.db.models.Q 对象。

我想要实现的目标与此相同:

q = Q(some_field__icontains='sth')
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)

,但 some_field 值应该来自变量:

field_name='some_field'
q = Q('%s__icontains=sth' % field_name)
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)

,但是这个解决方案当然不会给我正确的结果。

我也尝试这样使用字典:

dt = {'%s__icontains' % field_name: 'sth'}
q = Q(**dt)
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)

,但这在结果上也失败了。

如何使用变量作为查询项来使用 Q 对象?

谢谢。

python django django-q

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

通过外键查询Django订单(反向)

我有 2 个简单的模型,像这样:

class Obj(models.Model):
    ...
Run Code Online (Sandbox Code Playgroud)

class Objdata(models.Model):
    obj = models.ForeignKey(Obj)
    ...
    datum = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

. 我的目标是根据所属 Objdata 的最新数据条目选择所有 Obj。

也许它对于 django 来说已经太复杂了,但是在 sql 方面查询它并没有那么复杂。

那么,有没有一种 Django 方法来实现这一点,或者如何实现它是最好的(?)。我的解决方案目前有点复杂。


一个小的伪代码可能有助于我想要实现的目标:

lst = []
for elem in Obj.objects.filter():
    try:
        lst.append((elem.objdata_set.all().order_by('-datum')[0].datum, elem))
    except:
        lst.append((elem.datum, elem))
res = [e[1] for e in sorted(lst, reverse = True)]
Run Code Online (Sandbox Code Playgroud)

python mysql django

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

读取InMemoryUploadedFile两次

我有一个InMemoryUploadedFile对象,当我.read()在它上面时,它会松开它的内容.是否有可能从同一个对象中读取此内容两次?我试过.copy()它,但当然不应该工作.

如果不可能,我能以某种方式将内容放回同一个对象吗?

原因是:对于django形式,prevalidation()方法想要读取内容,但如果确实如此,以后我就不能保存它.这里的表现不算数.

python django django-forms

4
推荐指数
2
解决办法
1998
查看次数

Django 调用带参数的命令

我有一个带有以下参数解析器部分的管理命令:

class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument('--out', action='store', dest='out', required=True)
        parser.add_argument('--todos', action='store', dest='todos', \
                required=True, nargs='+')
        parser.add_argument('--filter', action='store', dest='filter')
        parser.add_argument('--list', action='store', dest='list')
        parser.add_argument('--add_id', action='store_true', dest='add_id')
Run Code Online (Sandbox Code Playgroud)

。我试图从视图/外壳调用此命令,但不起作用:

from django.core.management import call_command
call_command('prg_name', out='/tmp/111.txt')
Run Code Online (Sandbox Code Playgroud)

,但是我收到以下错误:argument --out is required

该程序有点旧: python: 2.7 Django: 1.11.16

我应该如何使用这个旧布局调用带参数的 call_command ?

有什么奇怪的,如果我这样做:

dt = {'--out=/tmp/111.txt': sth}
call_command(prg_name, *dt)
Run Code Online (Sandbox Code Playgroud)

它有效,但是我无法为 --todos 定义更多价值。

django python-2.7

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

Python + Django在aphat2(httpd),Redhat上的不同用户下运行

我有一个django应用程序绑定到Red Hat上的httpd(apache2),它运行良好,但我想用不同的用户名运行它,所以如果它写入文件系统文件的所有者应该是newuser .我正在寻找实现这一目标的解决方案.

我尝试使用httpd-itk(在此之后:http://www.webtatic.com/packages/httpd-itk/),但它抱怨:

permission denied: mod_wsgi (pid=31322): Unable to connect to WSGI daemon process
'myapp.djangoserver' on '/var/run/wsgi.31085.0.1.sock' after multiple attempts.
Run Code Online (Sandbox Code Playgroud)

在解决了这个问题后(通过给予777权限来测试文件),我仍然拥有文件所有者的apache.

我的conf文件如下所示:

<VirtualHost *:80>

    ServerName myapp
    ServerAlias myapp 
    DocumentRoot /usr/share/myapp

    <Directory /usr/share/myapp>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess syntyma.djangoserver processes=10 threads=20 display-name=%{GROUP}
    WSGIProcessGroup myapp.djangoserver

    WSGIScriptAlias / /usr/share/myapp/apache/django.wsgi
    CustomLog logs/myapp-access.log combined
    ErrorLog logs/myapp-error.log

    LogLevel debug
    AssignUserId newuser newuser

</VirtualHost>
WSGISocketPrefix /var/run/wsgi
Run Code Online (Sandbox Code Playgroud)

,以及创建的测试文件:

ls -l /tmp/ggg
-rw-r--r-- 1 apache apache 3 Sep  6 09:46 /tmp/ggg
Run Code Online (Sandbox Code Playgroud)

. …

python apache django redhat apache2

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

Django将默认值视为模板

有没有办法将变量传递给所有模板?例如,我有一个包含的视图

render_to_response('page.html', dictionary, \
context_instance = RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

我想将另一个变量传递给不在字典中的模板文件.

目的是什么?假设我在所有视图中需要这个变量(几百个),而且我很乐意将这个变量传递给模板文件而不需要触及字典.顺便说一下,这个变量是一个函数的结果,它有一个参数(request).

它可行吗?

python django templates views

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