2011-10-20 34 views
0

我正在显示一个django表格,并且我想在 传递给它之前准备一些字段数据以进行呈现。在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 

回答

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 

您应前,如果移动你的

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

会发生什么是if "POST"部分在窗体中添加一个值,然后它可能会被覆盖。

其次,如果你想改变一些东西的方式,显示您可能是最好的添加默认/初始值:

Django set default form values

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

如果你tryiong改变你想要的值保存到数据库然后你:

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

    form = BookForm(instance = myobjext) 

还有其他?请更具体一些。

+0

-1表示表单实例化应该放在if语句之前。它需要进入 - 如果发布,然后实例化与发布数据,否则实例化一个空的表单。 –

+0

@DanielRoseman它不必。它可以在之前或在其他地方。它没有什么区别。 –