我在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
感谢您的建议。
答案 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
希望有所帮助。