Django形式:在渲染之前格式化实例中的数据

时间:2017-04-21 08:37:34

标签: python django

使用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}
                      )

1 个答案:

答案 0 :(得分:1)

您可以覆盖__init__

class MyModelForm(ModelForm)
    def __init__(self, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)
        self.initial['core'] = ",".join(self.instance.core)