Django - 初始化后绑定数据 [英] Django - Form bind data after initialization

查看:93
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆