我正在尝试使用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.
我将 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.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 对象?
谢谢。
我有 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) 我有一个InMemoryUploadedFile对象,当我.read()在它上面时,它会松开它的内容.是否有可能从同一个对象中读取此内容两次?我试过.copy()它,但当然不应该工作.
如果不可能,我能以某种方式将内容放回同一个对象吗?
原因是:对于django形式,prevalidation()方法想要读取内容,但如果确实如此,以后我就不能保存它.这里的表现不算数.
我有一个带有以下参数解析器部分的管理命令:
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应用程序绑定到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)
. …
有没有办法将变量传递给所有模板?例如,我有一个包含的视图
render_to_response('page.html', dictionary, \
context_instance = RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
我想将另一个变量传递给不在字典中的模板文件.
目的是什么?假设我在所有视图中需要这个变量(几百个),而且我很乐意将这个变量传递给模板文件而不需要触及字典.顺便说一下,这个变量是一个函数的结果,它有一个参数(request).
它可行吗?