似乎django queryset在某种程度上表现得像python列表.
但据我所知,它不支持list的.append()方法.
我想做的是:
from my_django_app.models import MyModel
queryset = MyModel.objects.none()
queryset.append(MyModel.objects.first()) ## no list's .append() method!
Run Code Online (Sandbox Code Playgroud)
有没有办法将模型实例添加到现有的查询集?
经过大量搜索,我发现有几种方法可以将绑定方法或未绑定类方法添加到现有实例对象
这些方式包括以下代码采用的方法.
import types
class A(object):
pass
def instance_func(self):
print 'hi'
def class_func(self):
print 'hi'
a = A()
# add bound methods to an instance using type.MethodType
a.instance_func = types.MethodType(instance_func, a) # using attribute
a.__dict__['instance_func'] = types.MethodType(instance_func, a) # using __dict__
# add bound methods to an class
A.instance_func = instance_func
A.__dict__['instance_func'] = instance_func
# add class methods to an class
A.class_func = classmethod(class_func)
A.__dict__['class_func'] = classmethod(class_func)
Run Code Online (Sandbox Code Playgroud)
让我讨厌的是,键入函数的名称,instance_func或class_func两次.
有没有简单的方法将现有函数添加到类或实例而不再键入函数的名称?
例如,
A.add_function_as_bound_method(f)由于函数已经具有__name__属性,因此将现有函数添加到实例或类将是非常优雅的方式.
我正在尝试添加一个依赖于其他道具的道具,它将基本上由组件的所有者组件传递.
所以我做了:
propTypes: {
user: React.PropTypes.object,
comment: React.PropTypes.object
},
getDefaultProps: function() {
return {
admire: new Admire({
user: this.props.user,
comment:this.props.comment
})
};
}
Run Code Online (Sandbox Code Playgroud)
但它似乎是道具user,comment在getDefaultProps通话时无法访问.
有没有办法定义一个默认道具,它取决于将从所有者组件传递的其他道具?
我在JavaScript(ES6)文件中有一个很长的import语句:
import { A, B, C, D } from '../path/to/my/module/in/very/far/directory/'
Run Code Online (Sandbox Code Playgroud)
可以添加这样的新行吗?
import { A, B, C, D } from
'../path/to/my/module/in/very/far/directory'
Run Code Online (Sandbox Code Playgroud)
如果没有,是否还有其他方法可以使用Babel编写干净(保持我的代码在80列内)使用ES6语法导入语句?
我基本上来自python世界,并且已经和haskell玩了几天.
作为python用户,来自hackage/stackage的库的命名空间是最令人困惑的.
例如,在python中,我们将导入Scotty模块import scotty,而haskell会这样做import Web.Scotty.
谁上传自己的音乐库上stackage或hackage Haskellers似乎更喜欢把自己的音乐库类别下的命名空间(例如Web,Language...).
在讨论之外的依赖控制的透视图中留下它是否是一种好的方法,是否有关于此分类的任何事实上的约定?
是否有任何社区同意的指南,如"将这些Network类别放在类别下并将这些类别放在Web类别或Data类别下".?
我试图从我的查询集中采样一些记录以提高性能,例如:
from random import sample
from my_app import MyModel
my_models = MyModel.objects.all()
# sample only a few of records for performance
my_models_sample = sample(my_models, 5)
for model in my_models_sample:
model.some_expensive_calculation
Run Code Online (Sandbox Code Playgroud)
但我觉得它只会在执行时间方面变得更糟。
random.sample()幕后的实际工作如何?它会不会对 django 查询集造成相当大的性能负担?
假设我有一个反应组件,如:
var MyComponent = React.createClass({
getInitialState: function() {
return {
myStack: []
};
},
...
pop: function(a) {
// any concise , elegant way to pop from array type state?
}
}
Run Code Online (Sandbox Code Playgroud)
也许我可以写
pop: function() {
var clone = _.clone(this.state.myStack);
clone.pop();
this.setState({myStack: clone});
}
Run Code Online (Sandbox Code Playgroud)
但它看起来很难看......我知道它有效但只是在编写代码时看代码本身会变得很烦人.
从数组类型反应组件状态弹出有什么好方法吗?
我实现了push()像
push: function(a) {
this.setState({myStack: this.state.myStack.concat([a])});
}
Run Code Online (Sandbox Code Playgroud)
在一条线上.
我相信也有一个很好的一线解决方案pop.
我已经覆盖了clean()一些模型的方法来构造约束以满足我的数据库模式要求(因为它需要运行时信息来进行这些验证)。
现在我已经完成了大部分后端组件(模型、信号、..),现在我正在尝试为我的模型编写ModelForms 。
我想知道的是,clean()模型的方法和clean()表单侧的实现之间有什么关系吗?
如果是这样,并且表单clean()调用模型,clean()我将不必重写我的模型端clean()实现,并且能够避免代码冗余。
我正在使用 python 模式的 vim 插件来实现类似 IDE 的开发环境,它会自动突出显示源代码注释中的 TODO 一词。
例如,
# TODO: refactor something!
Run Code Online (Sandbox Code Playgroud)
或者,
"""
TODO: work on something!
"""
Run Code Online (Sandbox Code Playgroud)
python-mode 会突出显示“TODO”这些词。
我想知道是否有任何方法可以在像 vim 的 NERDTree 插件这样的新垂直窗口中列出 python 包的所有这些 TODO 注释,以便我可以看到包级 TODO 并对其进行处理。
我使用 q.latest() 从查询集中检索最新的对象,并get_latest_by = 'created'在其模型的Meta类中进行设置。
例如:
class A(models.Model):
created = models.DateTimeField(auto_now=True)
class Meta:
get_latest_by = 'created'
Run Code Online (Sandbox Code Playgroud)
但由于 djangoDateTimeField仅支持秒,没有微秒支持,我认为我的系统无法正确从查询集中检索最新对象。
也许这是因为表中有些记录具有相同的created值,尽管它们不是在完全相同的时间(微秒内)创建的。
因此,我尝试在类中使用pkforget_latest_by属性Meta而不是created,但由于我对 和 如何latest()协同get_latest_by工作缺乏深入的了解,我不确定放置get_latest_by = 'pk'.
直接放就可以吗get_latest_by = 'pk'?latest()django 的背面到底做了什么?
更新:
我正在写一个小模块来处理骨干中的这个csrf令牌问题,直到我得到@Louis 答案的推送通知.
他的回答相当优雅,看起来很不错,但我会留下一个链接到我的backbone.csrf模块github repo,只为那些需要它的人.
================================================== ==================
我使用Backbone作为我的前端框架以及我的Django后端.
Backbone.sync为了与Django的CSRF保护系统兼容,我必须在发送之前为每个AJAX请求配置我的CSRF请求头.
因为我使用require.js进行模块化的javascript开发,所以我尝试配置这个shim.init,require.config以便在浏览器上加载Backbone后立即触发此覆盖:
<script>
var require = {
...
shim: {
'jquery': {'exports': 'jQuery'},
'backbone': {
'deps': ['underscore', 'jquery'],
'exports': 'Backbone',
'init': function(_, $) {
alert('NOT EVEN CALLED');
var originalSync = this.Backbone.sync;
this.Backbone.sync = function(method, model, options) {
options.beforeSend = function(xhr) {
xhr.setRequestHeader('X-CSRFToken', window.csrf_token);
}
return originalSync(method, model, options);
}
}
}
}
}
</script> …Run Code Online (Sandbox Code Playgroud) 我一直在使用Field.contribute_to_class将字段动态注册到模型的方法。
直到我需要动态添加ForeignKey字段的情况时,我才困惑于两种方法中使用哪一种,contribute_to_class(cls, name)以及contribute_to_related_class(cls, related)。
我试图找到参考,但即使在django 官方中也看不到有关这些方法的任何文档。
这两种方法有什么区别,确切的语义是什么contribute_to_related_class?
django ×6
python ×5
javascript ×4
reactjs ×2
backbone.js ×1
csrf ×1
ecmascript-6 ×1
editor ×1
haskell ×1
ide ×1
jquery ×1
requirejs ×1
slick.js ×1
vim ×1