我有一个看起来像这样的模型:
class Event(models.Model):
event_dates = ManyToManyField("EventDate")
#...
class EventDate(models.Model):
event_date = DateField()
#...
Run Code Online (Sandbox Code Playgroud)
但是,在django管理MultipleSelect表单字段中获取show_dates的显示EventAdmin,我想将查询集限制为不是过去的event_dates.
查询集将类似于:
event_date_queryset = EventDate.objects.filter(event_date__gte = datetime.date.today())
Run Code Online (Sandbox Code Playgroud)
但是,我在哪里可以设置此查询集,以便只在该字段中显示非过去的日期?
(我目前没有自定义表单,EventAdmin但很乐意添加一个.)
在Python中,我如何/应该将具有数字的字符串,后跟其他字符解析为int?
我试图解决的具体问题是解析包含数字的字符串中的第一个数字,后跟任意数量的其他字符,包括可能是其他数字,我不感兴趣.例如,如果字符串是"12//" I需要得到的12.
我有一个自包含的Backbone.View实现MainControllerView,可以处理自己(即,没有理由对它进行外部引用.).如果,在我的主要bootstrapper函数中,我会这样做:
$(function() {
new MainControllerView();
});
Run Code Online (Sandbox Code Playgroud)
JSLint/JSHint抱怨我使用"new for side effects".阅读此警告表示上述内容被视为有臭味的代码.替代方法是不使用new,只是将构造函数作为函数调用,或者将其赋值给变量.但是,MainControllerView()直接调用我的函数而不使用new主干代码中的引发错误,所以这显然不是一个选项.对我来说似乎完全错误,以下是更好的代码:
$(function() {
var instantGarbage = new MainControllerView();
});
Run Code Online (Sandbox Code Playgroud)
事实上,这会引发一个不同的JSLint警告"instantGarbage已定义但从未使用过".显然,如果我这样做,我就会感到危险,如果不这样做,我就会感到危险.那么,是否有一种不同的"正确"方式来处理这类事情?以某种方式创建即时垃圾变量是"更好的代码"替代方案吗?Backbone.js是否以非Crockford批准的方式利用"new"关键字?或者这只是"规则"的例外之一?
在以下单元测试代码中:
TestModel = Backbone.Model.extend({
defaults: {
'selection': null
},
initialize: function() {
this.on('change:selection', this.doSomething);
},
doSomething: function() {
console.log("Something has been done.");
}
});
module("Test", {
setup: function() {
this.testModel = new TestModel();
}
});
test("intra-model event bindings", function() {
this.spy(this.testModel, 'doSomething');
ok(!this.testModel.doSomething.called);
this.testModel.doSomething();
ok(this.testModel.doSomething.calledOnce);
this.testModel.set('selection','something new');
ok(this.testModel.doSomething.calledTwice); //this test should past, but fails. Console shows two "Something has been done" logs.
});
Run Code Online (Sandbox Code Playgroud)
第三个ok失败,即使该函数是从主干事件绑定中有效调用的,如控制台演示的那样.

这非常令人沮丧,并且让我对sinon.js是否适合测试我的骨干应用程序感到震惊.我做错了什么,或者这是一个问题,sinon如何检测是否已经调用了某些东西?有解决方法吗?
编辑:这是我的具体例子的解决方案,基于接受答案的猴子补丁方法.虽然它在测试中有几行额外的设置代码,(我不再需要模块功能)但它完成了工作.谢谢,mu is too short
test("intra-model event bindings", function() {
var that = this;
var …Run Code Online (Sandbox Code Playgroud) 我对模板文件使用.jst扩展名,并使用requirejs文本加载它们!插入.例如,
define([
'jquery',
'backbone',
'underscore',
'text!templates/MyView.jst'
],
function($, Backbone, _, templateText) {
return Backbone.View.extend({
template: _.template(templateText),
initialize: function() {
},
render: function() {
}
});
});
Run Code Online (Sandbox Code Playgroud)
当我在本地测试时,这会起作用.但是,当我在将静态文件部署到AWS(应用程序的动态部分在Heroku上运行)后尝试执行此操作时,它无法加载.jst文件并且似乎试图将.js附加到他们的网址.
供参考,这是我的requirejs配置(来自main.js)
requirejs.config({
paths: {
//directories
plugins: "lib/plugins",
//libs
jquery: "lib/jquery/1.7.1/jquery",
underscore: "lib/underscore/1.3.3/underscore",
backbone: "lib/backbone/0.9.2/backbone",
moment: "lib/moment", // date lib
//require plugins
text: "lib/require/plugins/text",
domReady: "lib/require/plugins/domReady"
},
shim: { //specify all non-AMD javascript files here.
backbone: {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
underscore: {
exports: '_'
},
moment: {
exports: 'moment'
},
'plugins/jquery.colorbox': …Run Code Online (Sandbox Code Playgroud) 我在一些非常计算和数据库密集的视图上使用memcached视图缓存为我的生产服务器,如下所示:
urlpatterns = ('',
(r'^foo/(\d{1,2})/$', cache_page(60 * 15)(my_view)),
)
Run Code Online (Sandbox Code Playgroud)
有没有办法在Settings.py中DEBUG == True时关闭缓存,以便我不必担心缓存的obselete视图输出并可以使用我的IDE的调试器?
什么是pythonic方法将相同键控字典列表中的每个字典键重新映射到不同的键名?例如,
[{'type_id': 6, 'type_name': 'Type 1'}, {'type_id': 12, 'type_name': 'Type 2'}]
Run Code Online (Sandbox Code Playgroud)
必须变成
[{'type': 6, 'name': 'Type 1'}, {'type': 12, 'name': 'Type 2'}]
Run Code Online (Sandbox Code Playgroud)
(我需要进行转换以匹配我正在处理的API的输出规范.)
我正在使用django的dumpdata和loaddata命令来促进一些数据导出.但是我目前有一些未解决的弃用警告,因此当我将dumpdata的输出写入文件时,警告最终会出现在文件的顶部,我必须每次都手动清理转储文件.有没有办法抑制或避免警告,dumpdata的输出是合法的json,而不必每次都手动删除警告文本?
FACEPALM UPDATE:事实证明我忘记/忽略了这样一个事实,即我使用来自https://github.com/gtaylor/django-athumb的旧版S3BotoStorage 作为我的默认存储(即使我安装了django-storage).当前版本的django-storages没有遇到这个问题.问题是内容类型标题在击中boto时是unicode,而boto urllib.quoteplus在将其发送到AWS之前使用unicode .这不是Boto的错,因为每个HTTP都必须以某种方式将头转换为非unicode字符串.有关更深入的分析,请参阅https://github.com/boto/boto/issues/1669.
原始问题
我正在使用django_storage的S3BotoStorage和FileField将文件上传到Amazon S3.这是我的领域:
downloadable_file = FileField(max_length=255, upload_to="widgets/filedownloads", verbose_name="file")
Run Code Online (Sandbox Code Playgroud)
在设置中:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Run Code Online (Sandbox Code Playgroud)
在上传/下载过程中一切正常.
但是,文件存储在我的存储桶中,内容类型不正确.当我查看AWS S3控制台中文件的元数据时,文件的Content-Type显示为"application%2Fpdf"而不是"application/pdf".

如果你说它无关紧要,那就重要了.谷歌Chrome的内置pdf阅读器将挂在pdf上,内容类型无效,客户端会引起我的注意.
这是通过django-storages/boto上传的文件的示例.如果您正在使用chrome的内置pdf阅读器,我认为它会挂起,就像我和报告此内容的客户一样.如果您使用的是非Chrome浏览器或adobe插件,或者将文件下载到磁盘,您可能会没问题.
如果我通过AWS控制台手动将内容类型元数据更改为'application/pdf'(它提供的标准选项之一),那么就可以了.
我认为这是一个内部错误,boto构建AWS策略文档以上传文件的方式,因为我没有做任何超出标准用法的事情.但是,我已经介绍了boto代码,无法找到它实际逃逸的位置.
有人可以建议一个解决方法,或者引导我查看boto中的违规代码,以便我可以修补它并提交拉取请求吗?
boto == 2.9.5 django-storages == 1.1.8
我需要查看我们的Redis缓存,看看我们最大存储值的大小.我有Python经验或可以redis-cli直接使用.有没有办法迭代数据库中的所有键,以便我可以检查每个值的大小?
看起来SCAN是迭代键的方式,但我仍在研究如何使用它来获取值的大小并存储最大值.
django ×4
javascript ×3
python ×3
backbone.js ×2
amazon-s3 ×1
boto ×1
django-admin ×1
jslint ×1
qunit ×1
redis ×1
requirejs ×1
sinon ×1