我有一个 Django 模型,其中包含字段name(字符串)和value(整数)。假设我需要返回一个 {name:..., value:...} 对象的查询集,每个值加倍。我现在想做的是:
queryset.annotate(value=F('value') * 2)
Run Code Online (Sandbox Code Playgroud)
然而,django 告诉我该字段value已经存在。
我还尝试使用额外的:
queryset.annotate(value_double=F('value') * 2).extra(select={'value': 'value_double'})
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,因为value_double这不是一个有效的字段。
当然,在这种情况下我可以使用类似的东西queryset.extra(select={'value': 'value * 2'}),但我还有一些其他更复杂的情况,涉及很多函数,我真的不想编写sql,但我宁愿在django中找到解决方案。同样,在我的所有情况下,annotate只要我给结果一个新名称,就可以完美地工作。
我正在尝试编写一个函数,该函数接受boolean类型的参数并根据输入的值返回两种类型之一。我发现了两种方法:
function dependsOnParameter<B extends boolean>(x: B): B extends true ? number : string {
if (x) {
return 3;
} else {
return "string";
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,TypeScript说 Type '3'/'"string"' is not assignable to type 'B extends true ? number : string'.
我的其他方法如下所示:
function dependsOnParameter(x: true): number;
function dependsOnParameter(x: false): string;
function dependsOnParameter(x: boolean): number | string {
if (x) {
return 3;
} else {
return "string";
}
}
Run Code Online (Sandbox Code Playgroud)
这样编译;但是,如果我尝试使用我的函数:
function calling(x: boolean) {
dependsOnParameter(x);
}
Run Code Online (Sandbox Code Playgroud)
我懂了Argument of type …