这是我在 stackoverflow 上发表的第一篇文章,我将尝试遵循基本规则,但对我要温和。
我必须对 django 应用程序进行一些更改(乍一看似乎很肤浅)。客户希望网站管理部分中的所有表单下拉菜单按字母顺序排序。问题是其中一些选择是基于 models.py 文件中定义的静态列表,如下所示:
STATE=(
(1, 'Full'),
(2, 'Damaged'),
(3, 'Partially damaged')
)
Run Code Online (Sandbox Code Playgroud)
我尝试像这样重新排序列表:
STATE=(
(2, 'Damaged'),
(1, 'Full'),
(3, 'Partially damaged')
)
Run Code Online (Sandbox Code Playgroud)
但这似乎没有什么区别(尽管我不太熟悉Python缓存类和视图的方式)。
像这样重新排序索引:
STATE=(
(1, 'Damaged'),
(2, 'Full'),
(3, 'Partially damaged')
)
Run Code Online (Sandbox Code Playgroud)
可行,但意味着需要编写一些巨大且复杂的 SQL 脚本来保持旧数据的一致性(因为大多数列表都比这个列表长,并且排列会变得更加复杂)。
所以我的问题是:有没有办法根据这些选项的名称而不是索引对这些选项进行排序?也许在 的定义中models.IntegerField(..., choices=STATE)?
谢谢你们。
我正在使用 @ngular/core 6.1.1 和 @angular/forms 6.1.1
我正在尝试编写一个 ControlValueAccessor 来管理一组值。
我正在使用反应式表单并像这样声明我的表单:
export class ItemsFormComponent implements ControlValueAccor, OnInit {
public form: FormArray;
public items: string[] = ['foo', 'bar', 'baz'];
constructor(private formBuilder: FormBuilder) {
this.form = this.formBuilder.array(this.items.map((item) => new FormControl(item)));
this.form.valueChanges
.debounceTime(200)
.subscribe((items: string[]) => {
this.onChangeFn(items);
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到了一个模板解析错误
<ol [formArray]="form">
...
</ol>
Run Code Online (Sandbox Code Playgroud)
Can't bind to 'formArray' since it isn't a known property of 'ol'
我确实在我的功能模块中包含了 FormsModule 和 ReactiveFormsModule。基于 FormGroup 工作的任何其他表单。
如果我这样做,它有点工作,<ol [formGroup]="form">但它似乎是一个奇怪的黑客,并且验证似乎已损坏。而且我担心无论如何它都会在为产品构建时破裂。
那么有没有办法使用 FormArray 作为顶级表单呢?理想情况下,我想避免创建一个包含单个 FormArray 的 FormGroup。