【问题标题】:Pre-Setting django form data before displaying the form在显示表单之前预先设置 django 表单数据
【发布时间】:2011-12-12 04:53:51
【问题描述】:

我正在显示一个 django 表单,我想在它之前准备一些字段数据 被传递给被渲染。在 django 文档中,我看到很多地方 访问表单数据的位置,但没有在显示之前设置表单数据的位置。

关于如何做到这一点有什么想法或建议吗?

这是一个类似于 django 文档的示例。

-----------forms.py--------------

class BookForm(ModelForm):
    author = forms.CharField(max_length=100)
    title = forms.CharField(max_length=3,
                widget=forms.Select(choices=TITLE_CHOICES))
    birth_date = forms.DateField(required=False)

-----------views.py--------------

def author_view(request):
    if request.method == 'POST': 
        #  DO My processing... 
    form = BookForm() 
    # How can I edit, or preset my form fields here?
    c = Context({
      'form': form,
    })
    return prepCxt(request, 'book.html', c)   # Wrapper for easy display

【问题讨论】:

    标签: django forms


    【解决方案1】:

    在你看来,你有:

    def author_view(request):
        if request.method == 'POST': 
            #  DO My processing... 
        form = BookForm() 
        # How can I edit, or preset my form fields here?
        c = Context({
          'form': form,
        })
        return prepCxt(request, 'book.html', c)   # Wrapper for easy display
    

    你应该在 if 之前移动你的 form=BookForm()

    def author_view(request):
        form = BookForm() 
        if request.method == 'POST': 
            #  DO My processing... 
    

    发生的情况是if "POST" 部分在表单中添加了一个值,然后它可能会被覆盖。

    其次,如果您尝试更改某些内容的显示方式,则最好添加默认/初始值:

    Django set default form values:

    BookForm(initial={ 'myfield': 'myval'})
    

    如果您尝试更改要保存到数据库的值,那么您:

    if form.is_valid():
       myobject = form.save(commit=false)
       myobject.myfield = mval
       myobj.save()
    
       form = BookForm(instance = myobjext)
    

    还有什么?请更具体。

    【讨论】:

    • -1 表示表单实例化应该在 if 语句之前。它需要进入内部 - 如果是 post,则使用 post 数据实例化,否则实例化一个空表单。
    • @DanielRoseman 没必要。它可以在之前或在其他地方。差别不大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2014-09-23
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多