在保存之前更改数据,并在Django中选择原始值后更改它

时间:2014-02-18 06:02:22

标签: django forms

我在Django上有一个课程:

class admin_new(CreateView):
    form_class = UserForm
    template_name = 'users/new.html'
    success_url = reverse_lazy('users_index')

当用户发布数据时,例如:“ 2009-10 test ”,我想更改并将其保存在db:“ 10-2009 test ”。

当用户想要编辑它时,我需要再次更改已保存的数据,这意味着它应该在表单视图中转换为“ 200-10 test ”。

示例:

用户输入:2009-10测试

保存到db:10-2009 test

编辑视图:2009-10测试

保存到db:10-2009 test

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

Datefield的自定义模型字段可能会为您完成工作 - 请参阅Writing custom model fields。 以下是CREATING A CUSTOM DJANGO DATETIMEFIELD MODEL

的示例

答案 1 :(得分:1)

要保存数据,您可以在表单中定义自定义clean_<fieldname> function,例如:

class UserForm(ModelForm):
    class Meta:
        model = User

    def clean_name(self):
        import re
        return re.sub(r'^(\d{4})-(\d{2})(.*)$', r'\2-\1\3', self.cleaned_data['name'])

要在UpdateView中填充表单的值,您可以覆盖get_initial() method

def get_initial(self):
    import re
    initial = super(admin_edit, self).get_initial()
    p = get_object_or_404(self.model, **self.kwargs)
    initial.setdefault('name', re.sub(r'^(\d{4})-(\d{2})(.*)$', r'\2-\1\3', p.name))
    return initial

希望有所帮助。