Django: Internet Explorer выводит пустую форму - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть ModelForm, который отлично работает для FireFox и Chrome, но по какой-то причине, когда кто-либо отправляет форму с IE, сервер просто получает форму с пустыми значениями. Я подтвердил это, напечатав отправленные значения в form.is_valid() (как вы можете видеть ниже).

Вот мой код:

template.html:

<form id="tracking_form" action="/tracking/{{ view.person.id }}" method="POST">
    {% csrf_token %}
    {{ form.person }}
    <input type="submit" class="btn btn-default" value="Add Data" style="width: 190px;">
</form>

forms.py:

class TrackingForm(forms.ModelForm):

    def __init__(self, active_student=None, *args, **kwargs):
        super(TrackingForm, self ).__init__(*args, **kwargs)
        points_dict = {'class': 'weekday_points', 'min': 0, 'max': 100 }
        arrived_dict = { 'class': 'not_required' }


        for field in self.fields.values():
            field.widget.attrs['form'] = 'tracking_form'
            field.widget.attrs['class'] = 'form_field'
            field.required = False

        self.fields['monday_points'].widget.attrs.update(points_dict)
        self.fields['tuesday_points'].widget.attrs.update(points_dict)
        self.fields['wednesday_points'].widget.attrs.update(points_dict)
        self.fields['thursday_points'].widget.attrs.update(points_dict)
        self.fields['friday_points'].widget.attrs.update(points_dict)
        self.fields['monday_arrived'].widget.attrs.update(arrived_dict)
        self.fields['tuesday_arrived'].widget.attrs.update(arrived_dict)
        self.fields['wednesday_arrived'].widget.attrs.update(arrived_dict)
        self.fields['thursday_arrived'].widget.attrs.update(arrived_dict)
        self.fields['friday_arrived'].widget.attrs.update(arrived_dict)

    def is_valid(self):
        # This is just here to print the values server receives
        for name, field in self.fields.items():

            if field.disabled:
                value = self.get_initial_for_field(field, name)
            else:
                value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
            print(name, ":", field.clean(value))

        valid = super(TrackingForm, self).is_valid()

        return valid


    class Meta:

        model = models.Tracking
        exclude = ('person',)

Это журнал при отправке формы с FireFox:

2018-11-16 02:23:15 week : 3
2018-11-16 02:23:15 term : 4
2018-11-16 02:23:15 year : 2018
2018-11-16 02:23:15 b1 : fasd
2018-11-16 02:23:15 b2 : asdfsad
2018-11-16 02:23:15 monday_points : 0
2018-11-16 02:23:15 monday_attended : 1
2018-11-16 02:23:15 monday_arrived : 09:00:00
2018-11-16 02:23:15 tuesday_points : 0
2018-11-16 02:23:15 tuesday_attended : 1
2018-11-16 02:23:15 tuesday_arrived : 09:00:00
2018-11-16 02:23:15 wednesday_points : 0
2018-11-16 02:23:15 wednesday_attended : 1
2018-11-16 02:23:15 wednesday_arrived : 10:30:00
2018-11-16 02:23:15 thursday_points : 0
2018-11-16 02:23:15 thursday_attended : 1
2018-11-16 02:23:15 thursday_arrived : 09:00:00
2018-11-16 02:23:15 friday_points : 0
2018-11-16 02:23:15 friday_attended : 1
2018-11-16 02:23:15 friday_arrived : 09:00:00

И это журнал отправки той же формы в IE:

2018-11-16 02:23:41 week : 
2018-11-16 02:23:41 term : 
2018-11-16 02:23:41 year : 
2018-11-16 02:23:41 b1 : 
2018-11-16 02:23:41 b2 : 
2018-11-16 02:23:41 monday_points : None
2018-11-16 02:23:41 monday_attended : 
2018-11-16 02:23:41 monday_arrived : 
2018-11-16 02:23:41 tuesday_points : None
2018-11-16 02:23:41 tuesday_attended : 
2018-11-16 02:23:41 tuesday_arrived : 
2018-11-16 02:23:41 wednesday_points : None
2018-11-16 02:23:41 wednesday_attended : 
2018-11-16 02:23:41 wednesday_arrived : 
2018-11-16 02:23:41 thursday_points : None
2018-11-16 02:23:41 thursday_attended : 
2018-11-16 02:23:41 thursday_arrived : 
2018-11-16 02:23:41 friday_points : None
2018-11-16 02:23:41 friday_attended : 
2018-11-16 02:23:41 friday_arrived : 

1 Ответ

0 голосов
/ 16 ноября 2018

Я исправил это. Это было не совсем понятно из кода, который я разместил, но форма содержала большинство входных данных вне тегов. IE, по-видимому, не может понять, что эти теги принадлежат форме. Я исправил это, поместив теги формы вокруг всех входных тегов. Другим решением может быть использование атрибута формы для входных тегов:

<form id="myform">
    <input id="something" type="text">
</form>

<button form="myform" type="submit">Submit that form over there</button>

Но я не проверял, это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...