小编Dr.*_*lch的帖子

Django ORM - objects.filter()与objects.all().filter() - 首选哪一个?

我经常看到像这样的结构

MyModel.objects.all().filter(...)
Run Code Online (Sandbox Code Playgroud)

这将返回默认Mananger的QuerySet.起初all()似乎是多余的,因为

MyMode.objects.filter(...)
Run Code Online (Sandbox Code Playgroud)

提供相同的结果.

但是,这对于默认的Manager似乎是安全的,因为Django文档中有以下两个语句:

摘自"添加额外管理器方法"一章

自定义Manager方法可以返回您想要的任何内容.它不必返回QuerySet.

all()经理方法的定义:

all()返回当前QuerySet(或QuerySet子类)的副本.这在您可能希望传入模型管理器或QuerySet并对结果进行进一步过滤的情况下非常有用.在任一对象上调用all()之后,你肯定会有一个QuerySet来使用.

这似乎有点像我的矛盾.一方面,Django提供了让管理器方法返回任何首选对象类型的自由,另一方面它需要一个QuerySet用于该all()方法.我知道每个经理都有一个get_queryset被调用的方法all().但谁阻止我压倒all()我的自定义经理?虽然我同意这样做是不好的设计.

  • 所以据我所知,该all()方法不保证返回QuerySet.到底是什么MyModel.objects回报?这句话是否要求all()?还是`get_queryset()?

  • 你喜欢MyModel.objects.filter(...)还是MyModel.objects.all().filter(...).如果是这样,为什么?

  • 您是否曾遇到过那些会以不合需要的方式搞乱这些方法的经理?

python django django-orm django-queryset django-managers

37
推荐指数
2
解决办法
4万
查看次数

在C#中联合多个列表

我正在为以下情况寻找一个优雅的解决方案:

我有一个包含List的类

class MyClass{ 
...
 public List<SomeOtherClass> SomeOtherClassList {get; set;}
...
}
Run Code Online (Sandbox Code Playgroud)

第三类叫做Model持有List<Myclass>一个我从外部操作的那个.

现在我想用一个方法扩展Model类,该方法返回所有MyClass实例上的所有唯一SomeOtherClass实例.

我知道有Union()方法和foreach循环我可以很容易地解决这个问题,我实际上做了.但是,由于我是所有C#3 +功能的新手,我很好奇如何在有或没有Linq的情况下更优雅地实现这一点.

我找到了一种方法,对我来说似乎相当笨拙,但它有效:

        List<SomeOtherClass> ret = new List<SomeOtherClass>();
        MyClassList.Select(b => b.SomeOtherClasses).ToList().ForEach(l => ret = ret.Union(l).ToList()); 
        return ret;
Run Code Online (Sandbox Code Playgroud)

注意:该b.SomeotherClasses属性返回一个List<SomeOtherClasses>.

这段代码远非完美,而且有些问题来自于我必须弄清楚什么是使用C#3的好风格,什么不是.所以,我提出了一个关于该片段的小清单,我很乐意得到一些评论.除此之外,我很高兴听到一些评论如何进一步改进此代码.

  • 临时列表ret可能是C#2中的一种方法的一部分,但是我应该能够使用方法链来重新签名这个列表是否正确?或者我错过了这一点?
  • 是否真的需要使用中间ToList()方法?我想要的只是对选择中的每个成员执行进一步操作.
  • 那些ToList()操作的成本是多少?他们风格好吗?必要?

谢谢.

c# linq extension-methods list

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

Oracle RawToHex函数 - 如果返回值超过varchar2限制会发生什么?

Oracle 11g中的RawToHex函数返回任何原始值的十六进制表示形式.此函数将Hex值作为varchar2返回.

如果我将BLOB传递给RawToHex()函数会导致十六进制表示超过varchar2限制4000,会发生什么?

有没有办法将非常大的BLOB转换为十六进制表示?

更新:

我做了一些调查,找到了问题第一部分的答案.我可以将BLOB传递给RawToHex函数,只要您不会触及Raw DataType的边界,这个就会成功执行.Oracle似乎隐式地从BLOB转换为Raw.

DECLARE

a varchar2(32767);
b blob;

BEGIN

select blob_column into b from a_table where a_table_id = 1;
dbms_output.put_line(dbms_lob.getlength(b)); --> output: 216
dbms_output.put_line(rawtohex(empty_blob())); --> converted blob

select blob_column into b from a_table where a_table_id = 2;
dbms_output.put_line(dbms_lob.getlength(b)); --> output: 140000
dbms_output.put_line(rawtohex(empty_blob())); --> ORA-06502: PL/SQL: numeric or value error

END;
Run Code Online (Sandbox Code Playgroud)

根据ora-code.com描述此错误

ORA-06502:PL/SQL:数字或值错误字符串

原因:发生算术,数字,字符串,转换或约束错误.例如,如果尝试将值NULL分配给声明为NOT NULL的变量,或者尝试将大于99的整数分配给声明为NUMBER(2)的变量,则会发生此错误.

操作:更改数据,操作方式或声明方式,以便值不会违反约束.

更新2:

我有一个解决这个问题的方法.将blob拆分为更小的块并逐步转换它们.它提供了正确的结果.这是一种正确的方法还是可以在某个时候解决这个问题?

function BlobToHex(data in blob) return clob
is
    v_clob    clob;
    v_start  pls_integer := 1;
    v_buffer pls_integer := 4000; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql blob long-integer

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

Git:在临时环境中使用 nvie 的 gitflow 概念

我们使用nvie 的 gitflow作为 git 分支策略的模式,并或多或少地遵循它。

主要区别在于临时环境,我必须将其集成到现有策略中。

一开始是相当简单的。暂存只不过是一个简单的分支,我们可以与新的发布分支合并。将其推送到 origin/stageserver 并在暂存期间执行我们想要执行的操作。到目前为止,一切都很好。

但是,假设我们在暂存中发现了一些我们想要纠正的内容(小错误修复,甚至可能是新集成功能中的错误?)。对我来说,目前尚不清楚处理此案的好策略是什么。

我目前的想法围绕以下策略:

  • 从 origin/staging 创建分支 staging_fix
  • 纠正错误
  • 重新运行暂存过程+测试
  • 将 staging_fix 分支与release分支合并
  • 从原点拉出发布分支
  • 根据 nvie 继续使用 gitflow,因此为生产等准备发布分支...

你认为这是个好主意吗?这将导致对登台分支的直接更改,这对我来说似乎是一条捷径,因为我必须直接修改登台环境 - 这是你不会对生产环境做的事情,而且我希望登台也能如此尽可能地投入生产。

或者,可以直接更正发布分支,并一次又一次地将其推送到暂存阶段,直到解决所有错误。至少现在我们有了一条进行改变的单行道。

您更喜欢哪种方式?您会在这里建议一种不同的策略吗?

git version-control branching-and-merging

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

Django - 如何获取表单集中每个表单的前缀

在具有多个表单的表单集中,每个表单都有一个唯一的 id,如“MyForm-0_form”,而 MyForm 是公共前缀,0 是迭代的表单索引。

假设模板看起来像这样

模板.py:

<form action="" method="POST>
{% for form in formset %}
{{form}
{% endfor %}
</form>
Run Code Online (Sandbox Code Playgroud)

提交表单后,我想做如下操作:

视图.py:

[...]
if request.method == "POST":
  if formset.isValid():
    for form in formset:
      print form.currentFormID #here i get stuck. What I would like to yield: MyForm-0
Run Code Online (Sandbox Code Playgroud)

django django-forms

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

如何在C#中关闭调用程序后启动保持活动的外部应用程序?

我的目标是从我的C#应用​​程序调用外部程序,即使我的应用程序关闭也要保持活动状态.两个应用程序都不共享任何内容,我可以通过传入一些参数从命令行运行命令来完成相同的任务.

我一直在尝试使用进程类,我一直在使用DTE,我们都创建了一个外部程序实例(确切地说是Visual Studio),但是一旦调用应用程序关闭它们就会关闭.

还有其他方法吗?也许是对Windows的调用,它将启动该程序而不是我的应用程序?

c# external process

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

使用vim在单行中查找重复项

假设我有一个包含多行的文件

A.B C B.DAT
E.F C F1.DAT
Run Code Online (Sandbox Code Playgroud)

我想识别那些我有重复的行(例如B).但只有当副本后跟.DAT时(注意每个元素A,B,C,......可以是任意长度)

所以在前面提到的例子中,第一行应该返回匹配而第二行不应该返回匹配.

我想继续删除副本(这将是B.DAT),那么我如何确保仅匹配每行的第二次出现?

regex vim duplicates

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

是否有更好的(更pythonic)方式将文件内容写入列表?

我目前正在使用以下语句将文件的每一行写入列表

try:
  list = []
  with open(file, 'r') as f:
    for l in f.readlines():
      list.append(l)
except:
  ...
Run Code Online (Sandbox Code Playgroud)

虽然它工作得很好,我想知道是否有更多的pythonic方式来做到这一点?

编辑: 使用建议的更新

try:
  my_list = []
  with open(file, 'r') as f:
    my_list = f.readlines()
except IOError:
  ...
Run Code Online (Sandbox Code Playgroud)

python file-io

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