Python Django ModelForm,初始数据未显示在redisplay上

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

我有一个Django模型表单,其中传递了一些初始数据。到目前为止,它运行良好

但是,如果用户没有填写所有数据,或者犯了另一个错误,那么在重新显示表单时将不会再次查找初始值

下面是一段代码:

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。因为我想实际显示相关任务对象中包含的信息。但也许你是对的,我会在模板中显示信息。谢谢你给我指出了正确的方向。不客气。很高兴我能帮忙。我已经更新了代码示例,以显示如何将任务对象传递给模板。