使用Django 1.11,我的一个模型是存储在django-jsonfield字段中的数组。
class MyModel(models.Model)
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
core = JSONField(blank=True, null=True, default=None)
我在几个视图中使用ModelForm
来创建和编辑新实例。在ModelForm中,我借用django.contrib.postgres.forms.SimpleArrayField
来解析输入到字段中。
添加新模型很好,但在编辑版本中,数组预先填充了类似__str__
表示的内容(例如,1,2,3
数组变为['1','2','3']
。
我通过将数组解析为每个表单的initial=
来解决这个问题,但我宁愿在一个地方(DRY)执行此操作,而不必在每个视图和表单实例中重复它。
是否有任何钩子或方法(可能是自定义小部件?),这意味着我只能在表单或其他地方执行此操作?
使用initial=
hacky方法的当前视图的片段:
def edit_mymodel(id):
current_instance = MyModel.objects.get(pk=id)
if request.method == "GET":
form = MyModelForm(instance=current_instance,
initial={"core": ",".join(current_instance.core)}
)
return render(request, 'network_manager/edit.html',
{'form': form}
)
答案 0 :(得分:1)
您可以覆盖__init__
class MyModelForm(ModelForm)
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.initial['core'] = ",".join(self.instance.core)