Python Django ModelForm,初始数据未显示在redisplay上
我有一个Django模型表单,其中传递了一些初始数据。到目前为止,它运行良好 但是,如果用户没有填写所有数据,或者犯了另一个错误,那么在重新显示表单时将不会再次查找初始值 下面是一段代码:Python Django ModelForm,初始数据未显示在redisplay上,python,django,django-forms,Python,Django,Django Forms,我有一个Django模型表单,其中传递了一些初始数据。到目前为止,它运行良好 但是,如果用户没有填写所有数据,或者犯了另一个错误,那么在重新显示表单时将不会再次查找初始值 下面是一段代码: class TrainingAddForm(forms.ModelForm): class Meta: model = TrainingTasks fields = ('task','ac_reg','date','wo_no') def __init__(self, *args, **kw
class TrainingAddForm(forms.ModelForm):
class Meta:
model = TrainingTasks
fields = ('task','ac_reg','date','wo_no')
def __init__(self, *args, **kwargs):
super(TrainingAddForm, self).__init__(*args, **kwargs)
self.fields['task'].required = False
self.fields['task'].widget.attrs['disabled'] = 'disabled'
self.fields['date'].widget = widgets.AdminDateWidget()
def clean_task(self):
return
forms.py中的一个示例:
def add_trainingtask(request, task_id):
if request.POST:
form = TrainingAddForm(request.POST)
if form.is_valid():
tt = TrainingTasks(
trainee = request.user,
task = Tasks.objects.get(pk=task_id),
date = form.cleaned_data['date'],
ac_reg = form.cleaned_data['ac_reg'],
wo_no = form.cleaned_data['wo_no'],
)
tt.save()
return HttpResponseRedirect('/admin/tot/tasks/')
else:
form = TrainingAddForm(initial = {"task": task_id})
return render_to_response('admin/tot/trainingtasks/add.html', {
'form': form,
'task_id': task_id
},
context_instance = RequestContext(request)
)
如果用户未填写日期(强制填写),表单将重新显示,显示错误(必填字段),但不再显示任务id的基础记录。
ID仍然存在,而且还可以保存记录(在更正错误后),因此这几乎是一个让用户恼火的错误
我想我遗漏了一些代码,但我无法理解。我不确定我是否理解您的表单或视图的逻辑 您已包括任务字段,但已禁用该字段。禁用任务字段后,该值将不在request.POST集合中 在您的视图中,您正在将task_id参数作为初始数据传递给表单,如果request.method是POST,则您正在从数据库中检索任务对象 看起来任务是您想要分配给TrainingTask的任务,但不一定是您想要包含在表单中的任务。有鉴于此,我想:
#forms.py
class TrainingAddForm(forms.ModelForm):
class Meta:
model = TrainingTasks
fields = ('ac_reg','date','wo_no',)
#not include the task
def __init__(self, *args, **kwargs):
super(TrainingAddForm, self).__init__(*args, **kwargs)
self.fields['date'].widget = widgets.AdminDateWidget()
#views.py
from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404, render
from your_app.forms import TrainingAddForm
from your_app.models import Task, TrainingTasks
def add_trainingtask(request, task_id):
#make sure we have a valid Task object, or redirect.
#you could also use a try/except Task.DoesNotExist and show an error
task = get_object_or_404(Task, pk=task_id)
form = TrainingAddForm(request.POST or None)
if request.POST:
if form.is_valid():
tt = TrainingTasks(
trainee = request.user,
task = task,
date = form.cleaned_data['date'],
ac_reg = form.cleaned_data['ac_reg'],
wo_no = form.cleaned_data['wo_no'],
)
tt.save()
#dont hard-code the url here
return HttpResponseRedirect(reverse('admin_tot_tasks'))
return render(request, 'admin/tot/trainingtasks/add.html', {'form': form,
'task' : task})
希望这能帮到你们。这个问题并没有什么意义。你是说在重新加载页面后,
任务
表单字段是空的吗?是的,确实会发生这种情况。任务id仍然存在,但相应的记录将不再显示。抱歉,可能我的问题不清楚。我使用Task对象向添加TrainingTask对象的用户显示其背后的信息。因此,我获取了任务id并从数据库中获取了相应的记录。但是我想阻止用户更改choosen任务,这就是我禁用field.Hi的原因。如果您不希望他们更改任务对象,为什么要将其包含在表单数据中?您正在通过查询字符串传递task_id,因此您可以通过传递给视图的参数来获取它。嗨,Brandon。因为我想实际显示相关任务对象中包含的信息。但也许你是对的,我会在模板中显示信息。谢谢你给我指出了正确的方向。不客气。很高兴我能帮忙。我已经更新了代码示例,以显示如何将任务对象传递给模板。