我的问题最初表现为一个相当普遍的"超出最大递归深度"错误ListView
.在挖掘之后,我发现每次尝试加载相应页面时都会在dbtemplates中发现大量缓存命中.这促使我编写了自己的模板加载器,此时很明显Django load_template_source
每次加载页面时都会调用六十九次.
为什么Django会load_template_source
多次拨打电话?
visitor_index(db模板)
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ site.name }}</title>
</head>
<body id="home">
<pre>
Starting
{% for video in videos %}
{{ video.headline }}
{% endfor %}
</pre>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
urls.py
from django.conf.urls import include, url
from django.conf.urls.defaults import patterns
from videos.views import *
urlpatterns = patterns('',
url(r'^$', VisitorIndex.as_view(), name='index'),
)
Run Code Online (Sandbox Code Playgroud)
views.py
import logging
from django.views.generic import ListView
from videos.models import Video
logger = logging.getLogger(__name__)
class VisitorIndex(ListView):
context_object_name = 'videos'
template_name = 'visitor_index' …
Run Code Online (Sandbox Code Playgroud) 我有一个带有重写__init__
方法的模型,如下所示:
class MyModel(models.Model):
...
def __init__(self, *args, **kwargs):
if not kwargs.get('skip', False):
do_something()
super().__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
当我查询skip
查询集时__init__
,如何将参数传递给:
data = [obj for obj in MyModel.objects.all()]
Run Code Online (Sandbox Code Playgroud)
我想在自定义管理器中通过方法实现这个,使用这样的东西: queryset.with_skip()
我需要使用一个服务来发送包含 JSON 序列化嵌套结构的 JSON 响应,我想将其反序列化并存储在我的数据库中 - 我的应用程序使用 Django。
业务规则如下:
查询返回的对象总是具有id
一个唯一的整数createdAt
属性,通常是一个属性和一个updatedAt
属性,都带有日期时间数据,然后是其他几个基本类型的属性(int、float、str、datetime 等),以及几个属性可以是另一个对象或对象数组。
如果属性值是一个对象,则父级通过“外键”与它相关联。如果它是一个对象数组,那么我们有两种情况:要么数组的对象通过“外键”与父对象相关联,要么通过“多对多”将父对象与数组的每个成员相关联' 关系。
我需要在我的数据库中镜像每个对象,所以每个模型都有一个id
作为主键的字段,但它不是自动生成的,因为真正的 id 将与导入的数据一起提供。
所有这些实体之间的关系已经反映在我的模型模式中。我采用这种方法(镜像数据结构)是因为如果我将接收到的数据展平以将其全部保存到单个表中,则会出现可怕的复制,无视所有数据规范化规则。
对于每个根对象,我需要这样做:
id
updatedAt
记录和传入数据的值相同,则可能会跳过更新下面我将复制我从服务接收到的数据的一个非常简化的示例,以及我想在其中存储它的模型。真正的东西比那要庞大得多,而且复杂得多,这就是为什么我非常想学习一种让 ORM 解决问题的方法,如果它能够的话。硬编码整个事情需要永远,除了很容易出错并且如果将来数据模式发生变化会造成维护地狱。
{
"id": 37125965,
"number": "029073432019403",
"idCommunication": "1843768",
"docReceivedAt": {
"date": "2019-12-20 08:46:42"
},
"createdAt": {
"date": "2019-12-20 09:01:14"
},
"updatedAt": {
"date": "2019-12-20 09:01:32"
},
"branch": {
"id": …
Run Code Online (Sandbox Code Playgroud) unique_together
不起作用,它只在第一个字段上设置唯一约束并忽略第二个字段。有没有办法强制执行唯一约束?
class BaseModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
deleted = models.DateTimeField(db_index=True, null=True, blank=True)
last_modified_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Book(BaseModel):
first_form_number = models.CharField(max_length=8)
class Meta:
unique_together = (("first_form_number", "deleted"),)
Run Code Online (Sandbox Code Playgroud) 我在Python 2.x中有一个部分排序的元组.
为什么Python反转它而不是排序呢?
>>> data = (u'a', (1,), 'b ', u'b', (2,), 'c ', u'c', (3,), 'd ', u'd', (4,), 'e')
>>> sorted(data) == list(reversed(data))
True
Run Code Online (Sandbox Code Playgroud)
我期待着Python 3.
我见过类似的问题,但没有一个解决方案对我有用.我正在使用express 3,使用ejs进行模板化.令牌正在html中填充,如下所示:
<input type="hidden" name="_csrf" value="IS+SwCqr3j+vGW9QSqIk56ZC/">
Run Code Online (Sandbox Code Playgroud)
这是我的模板html对于输入字段的样子:
<input type="hidden" name="_csrf" value=<%= token %>/>
Run Code Online (Sandbox Code Playgroud)
但是当我提交表格时,我得到了
Error: Forbidden at Object.exports.error
Run Code Online (Sandbox Code Playgroud)
这是我的主应用程序配置功能的样子
app.configure(function () {
app.engine('.html', require('ejs').__express);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.static(__dirname + '/public'));
app.use(express.session({
store: new mongoStore({
url:'mongodb://localhost/test',
maxAge: 300000
}),
secret: '076ee61d63ba104r4e34872411e433b2',
cookie: {
path : '/',
httpOnly : true,
maxAge : 1000*60*60*24*30*12
}
}));
app.use(express.csrf());
app.use(function(req, res, next){
res.locals.token = req.session._csrf;
next();
});
app.use(app.router);
});
Run Code Online (Sandbox Code Playgroud)
会话工作正常,令牌正在填充,所以我不知道现在要做什么.
我正在尝试在 Django 中编写一个自定义 PostgreSQL 函数,它将强制日期时间为查询集中指定的时区。我对 db 函数的第一次调用如下所示:
from django.db.models.expressions import Func
class DateTimeInTimezone(Func):
template="%(expressions)s AT TIME ZONE %(tz_info)s"
Run Code Online (Sandbox Code Playgroud)
该函数适用于简单的情况,我直接将时区字符串传递到函数中,如下所示:
MyModel.objects.filter(timefield__gte=DateTimeInTimezone(Now(), tz_info='EST'))
Run Code Online (Sandbox Code Playgroud)
但是,它不适用于更复杂的情况,即时区是在模型的某些字段上定义的。考虑以下人为的示例:
class User(models.Model):
time_zone = models.CharField()
class Meeting(models.Model):
users = models.ManyToManyField(User, related_name='meetings')
start_time = models.DateTimeField() # in UTC
end_time = models.DateTimeField() # in UTC
Run Code Online (Sandbox Code Playgroud)
要回答“今天当地时间中午 12 点哪些用户将参加会议?”这一问题,我需要此查询集的一些变体:
noon_utc = ...
User.objects.filter(
meetings__start_time__lte=DateTimeInTimezone(noon_utc, tz_info=F('time_zone')),
meetings__end_time__gt=DateTimeInTimezone(noon_utc, tz_info=F('time_zone'))
)
Run Code Online (Sandbox Code Playgroud)
然而,按照目前的编写,DateTimeInTimezone
将只是将字符串注入F('time_zone')
到 sql 中,而不是解析该字段。
是否可以向此函数添加对F 表达式的支持?我还应该考虑其他方法吗?
django django-orm django-queryset django-postgresql django-1.10
我正在使用forms(forms.ModelForm
),当我在模型中创建表单时,我有一点不方便.我的情况如跟在我的models.py
文件中:
我有这个CorporalSegment
型号:
class CorporalSegment(models.Model):
SEGMENTO_HOMBRO = 'Hombro'
SEGMENTO_CODO = 'Codo'
SEGMENTO_ANTEBRAZO = 'Antebrazo'
SEGMENTO_MANO = 'Mano'
SEGMENT_CHOICES = (
(SEGMENTO_HOMBRO, u'Hombro'),
(SEGMENTO_CODO, u'Codo'),
(SEGMENTO_ANTEBRAZO, u'Antebrazo'),
(SEGMENTO_MANO, u'Mano'),
)
corporal_segment = models.CharField(
max_length=12,
choices=SEGMENT_CHOICES,
blank=False,
)
class Meta:
verbose_name_plural = 'Segmentos Corporales'
def __str__(self):
return "%s" % self.corporal_segment
Run Code Online (Sandbox Code Playgroud)
我有Movement
模特
class Movements(models.Model):
name = models.CharField(
max_length=255,
verbose_name='Movimiento'
)
class Meta:
verbose_name_plural = 'Movimientos'
def __str__(self):
return "%s" % self.name
Run Code Online (Sandbox Code Playgroud)
我有Metric
模特
class Metrics(models.Model): …
Run Code Online (Sandbox Code Playgroud) 当我尝试运行迁移时,我得到了 "Migration urls in app *** has no Migration class"
吗?我刚刚添加了新应用.
不知道要看什么方向.追溯:
C:\Users\PAPA\DEV\liberty\lib\site-packages\django\db\models\__init__.py:55:
RemovedInDjango19Warning: The utilities in django.db.models.loading are deprecated
in favor of the new application loading system.
from . import loading
Traceback (most recent call last): File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "...\django\core\management\__init__.py", line 338, in execute_from_command_line
utility.execute()
File "...\django\core\management\__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "...\django\core\management\base.py", line 390, in run_from_argv
self.execute(*args, **cmd_options)
File "...\django\core\management\base.py", line 441, in execute
output = self.handle(*args, **options)
File "...\django\core\management\commands\makemigrations.py", line 63, …
Run Code Online (Sandbox Code Playgroud) 我正在学习Python中的lambdas.我需要创建一个函数列表,f = [f1, f2...]
以便每个函数都fi(x)
接受一个列表x
并返回(x[i]-1)
.
这就是我尝试编码的方式,但我得到了令人惊讶的结果.请帮助我理解为什么三个打印件中的每一个都给出不同的结果.最后两个让我绝对难过!
f = [(lambda x: x[i]-1) for i in range(5)]
# I expect f to be [ (lambda x: x[0]-1), (lambda x: x[1]-1), ...]
x = [1, 2, 3, 4, 5]
print f[0](x), f[1](x), f[2](x) # output: 4 4 4 !!
print [f[i](x) for i in range(5)] # output: [0, 1, 2, 3, 4] as expected
print [f[k](x) for k in range(5)] # output: [4, 4, 4, 4, …
Run Code Online (Sandbox Code Playgroud) 这个问题至少被问到我寻找答案的次数,但从未让我满意.我有一个52个子视图代表一副牌的视图.这些卡片出现在屏幕的中央,分成两叠牌,然后合并为一个洗牌的牌组.
如果我把self.standardShuffle()
从viewDidAppear()
,实例化卡的图像后,它工作得很好.
但是,如果我self.standardShuffle()
连续两次调用,第二个调用会捕获飞行中的第一个动画,并且动画会被破坏.必须有一种方法来阻止调用线程,直到动画链完成.定时器变得太笨重,我无法将所有代码放在动画块中(无论如何它都不起作用.)
有人有真正的答案吗?请.
django ×7
python ×4
animation ×1
csrf ×1
django-1.10 ×1
django-forms ×1
django-orm ×1
django-views ×1
express ×1
ios ×1
json ×1
lambda ×1
node.js ×1
python-2.x ×1
swift ×1