Django - 初始化后绑定数据 [英] Django - Form bind data after initialization
本文介绍了Django - 初始化后绑定数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个用户
模型,我正在尝试管理创建/更新表单呈现/发布的视图。
I have a user
model for which I'm trying to make a view that manages both create/update form rendering/post.
这是我现在所做的视图
def user_edit(request, user_id=None):
obj = {}
status = 200
if user_id:
user = get_object_or_404(User, pk=user_id)
else:
user = User()
user_form = UserForm(instance=user, prefix='user')
if request.method == 'POST':
user_form = UserForm(request.POST, instance=user, prefix='user')
if user_form.is_valid():
user_form.save()
else:
status = 406
obj['user_form'] = user_form
return render(request, 'user/edit.html', obj, status=status)
这个工作正常,但是你可以看到,我的 user_form
是initia亮了2次。为了使更多的DRY,在 POST
时间,我想更新表单定义,而不是重新定义它。如下所示:
This works fine, but as you can see, my user_form
is initialized 2 times. In order to make this more DRY, at POST
time I'd like to update the form definition instead of redefining it. Something like:
if request.method == 'POST':
user_form.data = request.POST
user_form.prefix = 'user'
但是我不能做这个工作。所以2个问题:
But I can't make this work. So 2 questions:
- 我的看法是否有效?
- 如何避免表单-definition?
推荐答案
我将以这种方式重组几行:
I would just restructure a couple of lines this way:
def user_edit(request, user_id=None):
status = 200
if user_id:
user = get_object_or_404(User, pk=user_id)
else:
user = User()
user_form = UserForm(request.POST or None, instance=user, prefix='user')
if request.method == 'POST':
if user_form.is_valid():
user_form.save()
else:
status = 406
return render(request, 'user/edit.html', {'form': user_form}, status=status)
有时,复制可能是1行代码以保持其可读性是有意义的。
Sometimes, it makes sense to duplicate may be 1 line of code to keep it readable.
这篇关于Django - 初始化后绑定数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文