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

2024-10-02 02:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

在表单.py公司名称:

^{pr2}$

如果用户没有填写,即日期(必须填写),表单将重新显示,显示一个错误(需要填写字段),但任务标识的基本记录不再显示。 ID仍然存在,还可以保存记录(在更正错误之后),因此这对用户来说几乎是一个恼人的错误。在

我想我漏掉了一些代码,但我想不出来。在


Tags: 数据代码用户self表单fieldstaskdate
1条回答
网友
1楼 · 发布于 2024-10-02 02:25:00

我不确定我是否理解你的形式或观点的逻辑。在

您已包含任务字段,但禁用了该字段。禁用任务字段后,该值将不在请求.POST收藏。在

在您的视图中,将task_id参数作为初始数据传递给表单,如果请求.方法是一个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})

希望对你有帮助。在

相关问题 更多 >

    热门问题