小编Jea*_*ung的帖子

Django-变更迁移基础

由于某些原因,我想对模型进行重大更改。我想以某种方式重做整个设计,但是Django迁移实现通过不更新模型库来牢记以前的设计。

让我快速展示一下我之前所拥有的,然后现在所拥有的。

app1.TopLevel
  |_ app1.IntermediateLevel
    |_ app2.LowLevel
Run Code Online (Sandbox Code Playgroud)

我有3个这样的模型,那么现在我想把这个设计切成更适合我当前项目的模型,例如

app2.TopLevel
  |_ app2.LowLevel
Run Code Online (Sandbox Code Playgroud)

我的主要更改是,首先,我不再需要中间模型,其次,我不需要顶部保持app1.TopLevel这种方式。

我的数据没有问题(我进行了多次迁移,有些是使用Python将数据放入临时字段中,然后稍后将数据放回到正确的字段中并删除那些临时字段)。

我的问题是,当我们创建继承的模型时,我们要定义其基础;

app1.TopLevel
  |_ app1.IntermediateLevel
    |_ app2.LowLevel
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我会得到类似

类“ LowLevel”中的本地字段“ toplevel_ptr”与基类“ IntermediateLevel”中类似名称的字段发生冲突

我阅读了官方文档和源代码(用于迁移),但到目前为止,我什么都没有看到。是否可以告知迁移系统我们更改了模型库(其父库)?

否则,我唯一的解决方案是创建新模型,运行python迁移以将数据从旧模型复制到新模型。然后删除旧模型并重命名新模型,以获得我想要的名称。

django

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

Java8流出奇怪的行为

我正在测试一些Java8流API代码,但我无法弄清楚这个代码发生了什么.

我在考虑ParallelStream以及它是如何工作的,我进行了一些比较.两个不同的方法进行大迭代,添加32.768.000个BigDecimals,一个使用ParallelStream,另一个使用正常迭代.我参加了一项测试,我知道它无效,但有些事情引起了我的注意.

测试是:

并行流:

private static void sumWithParallelStream() {
    BigDecimal[] list = new BigDecimal[32_768_000];
    BigDecimal total = BigDecimal.ZERO;
    for (int i = 0; i < 32_768_000; i++) {
        list[i] = new BigDecimal(i);
    }
    total = Arrays.asList(list).parallelStream().reduce(BigDecimal.ZERO, BigDecimal::add);
    System.out.println("Total: " + total);
}
Run Code Online (Sandbox Code Playgroud)

普通代码:

private static void sequenceSum() {
    BigDecimal total = BigDecimal.ZERO;
    for (int i = 0; i < 32_768_000; i++) {
        total = total.add(new BigDecimal(i));
    }
    System.out.println("Total: " + total);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Total: 536870895616000
sumWithParallelStream(): 30502 ms

Total: 536870895616000 …
Run Code Online (Sandbox Code Playgroud)

java performance java-8 java-stream

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

为什么TArray &lt;recordType&gt;与recordType数组不同?

我有一个记录类型定义为:

type 
    TRecordType = record
        Field1: string;
        Field2: Variant;
    end;
Run Code Online (Sandbox Code Playgroud)

当我以这种方式定义一个函数时:

function Function1(const Records: TArray<TRecordType>): TAnyOtherClass;
Run Code Online (Sandbox Code Playgroud)

并这样称呼:

Function1([BuildRecord('string', value), BuildRecord('OtherString', otherValue)])
Run Code Online (Sandbox Code Playgroud)

编译器说:

[DCC错误] AnyUnit.pas(142):需要E2001序数类型

我很早以前就读过一些地方,Delphi的编译器在一种预处理器中处理泛型,并在代码中某种形式的字符串替换,然后我希望Function1计算结果类似于:

function Function1(const Records: array of TRecordType): TAnyOtherClass;
Run Code Online (Sandbox Code Playgroud)

因为TArray是定义的TArray<T> = array of T;

我认为这没有发生,因为当我将函数声明更改为:

function Function1(const Records: array of TRecordType): TAnyOtherClass;
Run Code Online (Sandbox Code Playgroud)

编译代码时没有错误或警告。

这个问题有一个答案,链接到一篇说明差异的文章,但是链接断开了。所以我的问题是,TArray<T>如果不是,那意味着什么array of T

arrays delphi delphi-xe

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

标签 统计

arrays ×1

delphi ×1

delphi-xe ×1

django ×1

java ×1

java-8 ×1

java-stream ×1

performance ×1