我经常看到像这样的结构
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(...).如果是这样,为什么?
您是否曾遇到过那些会以不合需要的方式搞乱这些方法的经理?
我正在为以下情况寻找一个优雅的解决方案:
我有一个包含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()方法?我想要的只是对选择中的每个成员执行进一步操作.谢谢.
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) 我们使用nvie 的 gitflow作为 git 分支策略的模式,并或多或少地遵循它。
主要区别在于临时环境,我必须将其集成到现有策略中。
一开始是相当简单的。暂存只不过是一个简单的分支,我们可以与新的发布分支合并。将其推送到 origin/stageserver 并在暂存期间执行我们想要执行的操作。到目前为止,一切都很好。
但是,假设我们在暂存中发现了一些我们想要纠正的内容(小错误修复,甚至可能是新集成功能中的错误?)。对我来说,目前尚不清楚处理此案的好策略是什么。
我目前的想法围绕以下策略:
你认为这是个好主意吗?这将导致对登台分支的直接更改,这对我来说似乎是一条捷径,因为我必须直接修改登台环境 - 这是你不会对生产环境做的事情,而且我希望登台也能如此尽可能地投入生产。
或者,可以直接更正发布分支,并一次又一次地将其推送到暂存阶段,直到解决所有错误。至少现在我们有了一条进行改变的单行道。
您更喜欢哪种方式?您会在这里建议一种不同的策略吗?
在具有多个表单的表单集中,每个表单都有一个唯一的 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) 我的目标是从我的C#应用程序调用外部程序,即使我的应用程序关闭也要保持活动状态.两个应用程序都不共享任何内容,我可以通过传入一些参数从命令行运行命令来完成相同的任务.
我一直在尝试使用进程类,我一直在使用DTE,我们都创建了一个外部程序实例(确切地说是Visual Studio),但是一旦调用应用程序关闭它们就会关闭.
还有其他方法吗?也许是对Windows的调用,它将启动该程序而不是我的应用程序?
假设我有一个包含多行的文件
A.B C B.DAT
E.F C F1.DAT
Run Code Online (Sandbox Code Playgroud)
我想识别那些我有重复的行(例如B).但只有当副本后跟.DAT时(注意每个元素A,B,C,......可以是任意长度)
所以在前面提到的例子中,第一行应该返回匹配而第二行不应该返回匹配.
我想继续删除副本(这将是B.DAT),那么我如何确保仅匹配每行的第二次出现?
我目前正在使用以下语句将文件的每一行写入列表
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) c# ×2
django ×2
python ×2
blob ×1
django-forms ×1
django-orm ×1
duplicates ×1
external ×1
file-io ×1
git ×1
linq ×1
list ×1
long-integer ×1
oracle ×1
plsql ×1
process ×1
regex ×1
vim ×1