小编Bar*_*vds的帖子

Django .values_list()替代方法为ForeignKey字段的模型返回QuerySet?

我正在寻找一种基于模型ForeignKey字段将一种类型的QuerySet转换为另一种类型的干净方法,所以基本上类似于.values_list('my_fk', flat=True)但返回正确的QuerySet而不是values_list()变体.

例如:

class Parent(models.Model):
    child = models.ForeignKey(Child)
    ...

children_qs = Parent.objects.filter(...).theMagicMethod('child')  
Run Code Online (Sandbox Code Playgroud)

children_qs现在,这应该是先前查询中使用的所有Child实例的查询集,而不是返回Parent实例的查询集.

您可以使用自定义__in查询集和查找来执行此操作,但感觉有点臭:

class ParentQuerySet(models.QuerySet):
    ...
    def children(self):
        return Child.objects.filter(id__in=self.values_list('child_id', flat=True))
Run Code Online (Sandbox Code Playgroud)

child_id将从Parent的查询集中的记录中获取所有FK,并直接重新查询Child.当我检查SQL它做了一个子查询,我不确定这是最优还是有一些奇怪的副作用.它看起来像原始父查询的排序已经消失,因此重复.

有人有更好的东西吗?

注意:我知道我可以通过Child直接查询并使用反向查找过滤Parent的字段,但这不支持您可以在主模型上执行的所有操作.

python django django-queryset

6
推荐指数
2
解决办法
2706
查看次数

如何在 javascript 中使用人类可读的差异突出显示来呈现文本差异

我需要以人类可读的格式(例如:非机器优化)打印文本(代码)的内联差异。

我的平台是 Javascript(主要的 node.js,浏览器)。我有自己的打印机/造型器,但在生成正确的差异更改时遇到问题。

重要的是人类直觉的变化:因此对每行变化的强烈偏见,以及非常低的随机碎片字母。

看起来不错的非 JS diff 渲染器的例子是 Tortoise SVN/GIT 中的那个和 github.com 上的 diff 渲染器。我相信 github 上的那个读取了“标准”补丁格式,但我确信需要更多的逻辑才能将其转换为漂亮的内联差异。

我试过的一些模块:

  1. diff( https://npmjs.org/package/diff ) 经典,但它具有不自然的行和单词或字符差异的混合。(这用于mocha但它是有缺陷的)

  2. chardiff( https://npmjs.org/package/chardiff ) 基于diff,但它有一个为人类可读性设计的语义过滤器:它看起来更好,但仍然提供碎片化的单字母更改(经典 diff 不会)。

  3. diff-match-patchhttp://code.google.com/p/google-diff-match-patch),这是有希望的,但仍然不是 100%(仍然有一些违反直觉的差异)。

我想我需要使用这些模块之一作为组件(每行等)自己组装一些东西,但我不确定如何去做。

这是一个已解决的问题吗?

javascript diff node.js

5
推荐指数
0
解决办法
1217
查看次数

过滤普通模型与 django 多态模型子类的关系?

我有一个普通的 Django 模型,它与 django 多态模型有外键关系。

让我们将第一个PlainModel具有contentForeignKey 字段的字段调用为具有子类型和 的多态Content模型(简化示例)。VideoAudio

现在我想查询PlainModel引用Video.

问题是我找到的所有文档都是关于直接通过多态模型本身进行过滤的。所以在这个例子中类似的东西Content.objects.instance_of(Video)。但我需要PlainModel's,所以它需要看起来像PlainModel.objects.filter(content__instance_of=Video)。我尝试了很多变体,但找不到任何有效的方法。

在他们使用的文档中Q(instance_of=ModelB),但这不适用于关系 as Q(content__instance_of=ModelB)。它给出了类似“无法查询“x”:必须是“y”实例”的错误。即使有翻译调用,我猜也是因为 PlainModel 不具有多态性。

我有一个临时 hack,可以polymorphic_ctype使用常规 django 过滤器(例如 )直接在字段上进行过滤PlainModel.objects.filter(content__polymorphic_ctype_id=my_content_type_id),但这不处理子类。例如:ExtendedVideo查找时找不到Video,因为它会有不同的 ContentType id。

我可以解决这个问题并保留允许的子类型列表或解析类型层次结构以获取过滤器的更多内容类型,但这似乎重复了 django-polymorphic 的功能。

python django django-polymorphic

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

如何处理node.js中的/ cld输出的stdout流的字符编码?

我对如何安全地存储和读取process.stdoutNode.js中的输出感到困惑:

console.log()(等)的CLI输出是否以特定字符编码完成?或者是未指定形式的原始二进制文件?可以有二进制数据吗?(我不知道)

Node.js非常面向utf8,但是JS是UCS2,我不知道流对它做了什么.

并且相关:如果我将utf8中的Buffer转换为String(默认值),将string-diff应用于流是否安全?请注意我的diff渲染器将jsenc用于显示,因此它显示非printables.

用例是我希望能够安全地断言/区分CLI快照以验证我为各种工具构建的自定义记者(注意这包括发现意外的垃圾/ lint输出,所以我想点击真正的最终输出来自stdio流).

(欢迎任何相关建议)

javascript encoding stream command-line-interface node.js

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