Django与Formset验证有关的问题

时间:2019-01-31 20:30:22

标签: python django validation formset

我是django的新手,一直在梳理这支头发。一位同事编写了一个手动过帐函数,该函数验证is_valid()= true,而我正试图通过覆盖formset_valid函数来使用内置验证,但是它永远无效。

我有这个模型。py:

class Assignment(PACSModel):
    course_id = models.IntegerField(unique = False)
    assignment_number = models.IntegerField(unique = False)
    assignment_name = models.CharField(max_length = 100)
    start_date = models.CharField(max_length = 10)
    due_date = models.CharField(max_length = 10)
    end_date = models.CharField(max_length = 10)

这是form.py:

class AssignmentDatesForm(forms.ModelForm): 

class Meta:
    model = Assignment
    fields = [
    'assignment_number',
    'assignment_name',
    'start_date',
    'due_date',
    'end_date',
    ]

    widgets = { 'assignment_name' :forms.TextInput(attrs={'readonly':'readonly', 'class' : 'grey-text', 'size' : '25'}),
                'start_date' : forms.DateInput(format = '%m/%d/%Y', attrs ={ 'class' : 'datepicker'}),
                'due_date' : forms.DateInput(format = '%m/%d/%Y', attrs ={ 'class' : 'datepicker' }),
                'end_date' : forms.DateInput(format = '%m/%d/%Y', attrs ={ 'class' : 'datepicker' }),}

class Media:
    css = {'assignment_name': ('changeDates.css',)} 

AssignmentDatesFormSet = forms.modelformset_factory(
    model = Assignment,
    form = AssignmentDatesForm,
    extra = 0,
    ) 

手动遍历表单以显示:

         <table class = "table table-striped table-condensed table-hover"> 

            <thead >
                <tr>
                    <th>Assignment Number</th>
                    <th>Assignment Name</th>
                    <th>Start Date</th>
                    <th>Due Date</th>
                    <th>End Date</th>                   
                </tr>               
            </thead>
            <tbody> 
                {% for t in form %}
                <tr>
                    <td>{{ t.assignment_number }}</td> 
                    <td class = "inputA">{{ t.id }} {{ t.assignment_name }}</td>
                    <td>{{ t.start_date }}</td>
                    <td>{{ t.due_date }}</td>
                    <td>{{ t.end_date }}</td> 
                </tr>               
            {% endfor %}  

        </tbody>   

        </table> 

最后,该视图是ModelFormSetView之上的一个类,在该类中,我具有此简单的post函数来仅测试验证:

    def post(self, request, course_id, *args, **kwargs):
    logging.warning("In Post with course_id: " + course_id)
    formset = AssignmentDatesFormSet(request.POST)
    if formset.is_valid():
        logging.warning("Formset Saved")
        formset.save()
    logging.warning(vars(formset))
    return super(EditDueDates, self).post(request, course_id, *args, **kwargs)

这是一个简单的表单集,每个表单都是一个分配,用户可以在其中更改日期(开始日期,截止日期,结束日期)。

我只是想让它进行验证,因此它将调用formset_valid,并且可以进行保存/后期处理。但是每次我收到每种形式的错误:

<ul class="errorlist"><li>id<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li></ul>

我一点都不明白。 vars(formset)转储具有一个隐藏的form-0-id输入字段,该字段具有id(pk)设置。我不明白为什么它不会说它是有效的。

更令人困惑的是,一个同事让它可以工作几乎完全相同的事情,而且他不必包括Assignment_number字段。它不需要显示,但是如果我在那里没有显示,则会显示错误消息,要求将其包含在内。我们的表是相同的,并且pgsql中的所有字段都是必需的。

任何想法都将不胜感激。我不确定该去哪里诊断。

-将

0 个答案:

没有答案