我只想在填充时向一个字段添加一个初始值,这是我的观点
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字段中也看不见任何东西,
答案 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的格式和管理员身份加载