在显示表单之前预先设置django表单数据

时间:2011-10-20 23:18:05

标签: django forms

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

有关如何执行此操作的任何想法或建议?

这是一个类似于django docs的例子。

----------- -------------- 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

1 个答案:

答案 0 :(得分:0)

在您的观点中,您有:

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)

还有别的吗?请更具体一点。