Проблема Django с проверкой формы - PullRequest
0 голосов
/ 31 января 2019

Я новичок в Django, и на этом я выдернул свои волосы.Сотрудник написал ручную функцию post, которая проверяет is_valid () = true, и я пытаюсь перейти к использованию встроенной проверки путем переопределения функции formset_valid, но она никогда не действует.

У меня есть этот model.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)

Это Forms.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 являются обязательными.

Любые идеи будут с благодарностью.Я не уверен, куда пойти диагностировать это ..

-Will

...