小编hyn*_*cer的帖子

为什么Django(1.5.1)会调用Loader.load_template_source()69次?

我的问题最初表现为一个相当普遍的"超出最大递归深度"错误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)

django django-templates django-views django-debug-toolbar

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

在迭代查询集中将参数传递给对象模型类的__init__

我有一个带有重写__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()

django django-models django-queryset

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

将嵌套的 JSON 结构反序列化为 Django 模型对象

我需要使用一个服务来发送包含 JSON 序列化嵌套结构的 JSON 响应,我想将其反序列化并存储在我的数据库中 - 我的应用程序使用 Django。

业务规则如下:

  1. 查询返回的对象总是具有id一个唯一的整数createdAt属性,通常是一个属性和一个updatedAt属性,都带有日期时间数据,然后是其他几个基本类型的属性(int、float、str、datetime 等),以及几个属性可以是另一个对象或对象数组。

  2. 如果属性值是一个对象,则父级通过“外键”与它相关联。如果它是一个对象数组,那么我们有两种情况:要么数组的对象通过“外键”与父对象相关联,要么通过“多对多”将父对象与数组的每个成员相关联' 关系。

  3. 我需要在我的数据库中镜像每个对象,所以每个模型都有一个id作为主键的字段,但它不是自动生成的,因为真正的 id 将与导入的数据一起提供。

  4. 所有这些实体之间的关系已经反映在我的模型模式中。我采用这种方法(镜像数据结构)是因为如果我将接收到的数据展平以将其全部保存到单个表中,则会出现可怕的复制,无视所有数据规范化规则。

  5. 对于每个根对象,我需要这样做:

    • 检查数据库中是否已经有该记录 id
    • 在没有的情况下创建一个新记录
    • 如果已有记录,则更新现有记录(如果updatedAt记录和传入数据的值相同,则可能会跳过更新
    • 为每个嵌套对象递归重复这些相同的步骤,这些嵌套对象是为其父属性之一提供的值。

下面我将复制我从服务接收到的数据的一个非常简化的示例,以及我想在其中存储它的模型。真正的东西比那庞大得多,而且复杂得多,这就是为什么我非常想学习一种让 ORM 解决问题的方法,如果它能够的话。硬编码整个事情需要永远,除了很容易出错并且如果将来数据模式发生变化会造成维护地狱。

编辑:指向以下JSON模型先前简化版本的链接*

JSON 示例:

{
  "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)

python django json deserialization json-deserialization

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

Django 中的 unique_together 不起作用

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)

django django-models

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

Python 2.x排序的拼图

我在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.

python python-2.x

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

Express +节点CSRF禁止使用

我见过类似的问题,但没有一个解决方案对我有用.我正在使用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)

会话工作正常,令牌正在填充,所以我不知道现在要做什么.

csrf node.js express

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

DjangoORM:解析自定义数据库函数中的 F 表达式

我正在尝试在 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

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

forms.ModelForm不保存ManyToMany字段

我正在使用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)

python django django-models django-forms

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

app中的迁移网址没有迁移类

当我尝试运行迁移时,我得到了 "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)

django django-migrations

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

为什么这个简单的lambda函数会产生奇怪的输出?

我正在学习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)

python lambda

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

IOS,Swift,动画链接,等待主线程直到链完成

这个问题至少被问到我寻找答案的次数,但从未让我满意.我有一个52个子视图代表一副牌的视图.这些卡片出现在屏幕的中央,分成两叠牌,然后合并为一个洗牌的牌组.

如果我把self.standardShuffle()viewDidAppear(),实例化卡的图像后,它工作得很好.

但是,如果我self.standardShuffle()连续两次调用,第二个调用会捕获飞行中的第一个动画,并且动画会被破坏.必须有一种方法来阻止调用线程,直到动画链完成.定时器变得太笨重,我无法将所有代码放在动画块中(无论如何它都不起作用.)

有人有真正的答案吗?请.

animation ios swift

-3
推荐指数
1
解决办法
713
查看次数