向Django模型表单添加初始值

时间:2020-10-26 00:00:08

标签: django

我只想在填充时向一个字段添加一个初始值,这是我的观点

def add_program(request):
    module = Module.objects.all()
    last_item = Programme.objects.filter(module_id__in=module).last()
    if last_item:
        day = last_item.day + 1
    else:
        day = 1
    initial_data = {
        'day': day
    }
    if request.method == 'POST':
        form = ProgramAddForm(request.POST or None, request.FILES or None, initial=initial_data)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.save()
            return redirect('program_add')
    else:
        form = ProgramAddForm()
    return render(request, 'client_apps/program/form.html', {'form': form})

和表格

class ProgramAddForm(forms.ModelForm):

    class Meta:
        model = Programme
        fields = ['module', 'day', .........]

即使传递了初始值,当表单填充时,day字段中也看不见任何东西,

2 个答案:

答案 0 :(得分:1)

那是因为您仅在 POST 请求而不是 GET 请求的情况下使用它:

def add_program(request):
    module = Module.objects.all()
    last_item = Programme.objects.filter(module_id__in=module).last()
    if last_item:
        day = last_item.day + 1
    else:
        day = 1
    initial_data = {
        'day': day
    }
    if request.method == 'POST':
        form = ProgramAddForm(request.POST, request.FILES, initial=initial_data)
        if form.is_valid():
            instance = form.save()
            return redirect('program_add')
    else:
        form = ProgramAddForm(initial=initial_data)  # ← initial data for a GET request
    return render(request, 'client_apps/program/form.html', {'form': form})

答案 1 :(得分:0)

您可以在init方法中添加它

class ProgramAddForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(YoutubeModelForm, self).__init__(*args, **kwargs)
        self.fields["day"].value = "day"
        self.fields["day"].initial = "day"
        self.fields["day"].initial = "padding-top: 0;"

        class Meta:
             model = Programme

以django的格式和管理员身份加载

相关问题