选择字段的Django初始值

Ben*_*lah 5 python django

我遇到了一个奇怪的问题,我似乎无法在 django 的表单中设置其中一个字段的初始值。

我的模型字段是:

section = models.CharField(max_length=255, choices=(('Application', 'Application'),('Properly Made', 'Properly Made'), ('Changes Application', 'Changes Application'), ('Changes Approval', 'Changes Approval'), ('Changes Withdrawal', 'Changes Withdrawal'), ('Changes Extension', 'Changes Extension')))
Run Code Online (Sandbox Code Playgroud)

我的表单代码是:

class FeeChargeForm(forms.ModelForm):
    class Meta:
        model = FeeCharge
        # exclude = [] # uncomment this line and specify any field to exclude it from the form

    def __init__(self, *args, **kwargs):
        super(FeeChargeForm, self).__init__(*args, **kwargs)
        self.fields['received_date'] = forms.DateField(('%d/%m/%Y',), widget=forms.DateTimeInput(format='%d/%m/%Y', attrs={'class': 'date'}))
        self.fields['comments'].widget.attrs['class']='html'
        self.fields['infrastructure_comments'].widget.attrs['class']='html'
Run Code Online (Sandbox Code Playgroud)

我的视图代码是:

form = FeeChargeForm(request.POST or None)
form.fields['section'].initial = section
Run Code Online (Sandbox Code Playgroud)

其中 section 是传递给函数的 url var。我试过了:

form.fields['section'].initial = [(section,section)]
Run Code Online (Sandbox Code Playgroud)

也没有运气:(

任何想法我做错了什么,或者有没有更好的方法来从 url var 设置这个选择字段的默认值(在表单提交之前)?

提前致谢!

更新:这似乎与 URL 变量有关。如果我使用:

form.fields['section'].initial = "Changes Approval"
Run Code Online (Sandbox Code Playgroud)

它工作 np.. 如果我 HttpResponse(section) 它的输出正确。

rol*_*one 1

更新尝试转义您的网址。以下答案和文章应该会有所帮助:

如何在 Python 中对 URL 参数进行百分比编码?

http://www.saltycrane.com/blog/2008/10/how-escape-percent-encode-url-python/

尝试按如下方式设置该字段的初始值,看看是否有效:

form = FeeChargeForm(initial={'section': section})
Run Code Online (Sandbox Code Playgroud)

我假设当用户发布表单时您将要做很多其他事情,因此您可以使用以下内容将 POST 表单与标准表单分开:

if request.method == 'POST':
    form = FeeChargeForm(request.POST)
form = FeeChargeForm(initial={'section': section})
Run Code Online (Sandbox Code Playgroud)