我正在尝试使用这样的 SelectMultiple 小部件呈现 postgres Arrayfield 值
在模型.py 中:
SLOT_CHOICES = (('A','Slot A'),('B','Slot B'),('C','Slot C'),('D','Slot D'),('E','Slot E'),('F','Slot F'),('G','Slot G'),('H','Slot H'),('P','Slot P'),('Q','Slot Q'),('R','Slot R'),('S','Slot S'),('T','Slot T'),)
core_slots = ArrayField(models.CharField(max_length=1,choices=SLOT_CHOICES),blank=True,null=True)
在 forms.py 中:
self.fields['core_slots'].widget = forms.SelectMultiple(attrs={
'placeholder': 'Choose slots',
'class': 'multi-select-input',
},choices=self.Meta.model.SLOT_CHOICES)
如果我选择一个选项并提交,然后尝试使用“实例”获取填写的表单,那么它可以正常工作并将先前选择的选项显示为“已选择”。但是如果我选择了多个选项,那么在提交所有选定的值时都会正确插入数据库,但是如果我尝试使用“实例”获取填写的表单,那么它不会显示任何已选择的选项。
ManyToManyField 不会出现此问题。
在模型.py 中:
past_courses = models.ManyToManyField(Course,blank=True)
在 forms.py 中:
self.fields['past_courses'].queryset = Course.objects.filter(~Q(dept=self.instance.dept)).order_by('name')
self.fields['past_courses'].widget.attrs.update({
'placeholder': 'Choose past courses',
'class': 'multi-select-input',
})
这个工作正常。只有使用 SelectMultiple 小部件呈现的 ArrayField 存在问题。我想在模板中显示提交的选项,有没有办法解决这个问题,或者有没有其他方法可以在模板中显示选定的选项。