cleaned_data не получает обновленные целочисленные значения из формы в django - PullRequest
0 голосов
/ 09 марта 2019

Я немного новичок в Django, но смог найти все ответы на мои проблемы, кроме этой.

Я хотел отправить форму, в которой были бы как целочисленные поля, так и поля текстовой области Таким образом, при обычной отправке формы я смог получить данные из формы и использовать form.cleaned_data для сохранения формы

Когда я захотел обновить ту же форму, я извлек эти конкретные данные таблицы и загрузил их в форму для простых изменений.

Но когда я попытался повторно отправить форму, изменив значения, форма отправляла предыдущие данные целочисленных полей, которые я передал в форму, а не измененные значения.

Но он отправляет обновленные значения текстовой области как обычно.

Это изображение, когда данные извлекаются и передаются в форму. Перед редактированием

И это после того, как я отредактировал форму После того, как я отредактировал

напечатанные данные request.post после того, как я отправил форму с обновленными значениями Возвращает предыдущие значения, а не обновленные значения

<tr><th><label for="id_Number_of_existing_programmes">Number of existing programmes:</label></th><td>
<input type="number" name="Number_of_existing_programmes" value="5" required id="id_Number_of_existing_programmes"></td></tr>

Здесь число хранится в значении, а не внутри тегов html, как это обычно бывает с текстовыми полями. как это

<textarea name="Department_center" cols="40" rows="10" required id="id_Department_center">Like this</textarea>

Единственное решение, о котором я могу подумать, это не передавать данные, являющиеся полями типа Integer, а только данные, имеющие тип текста, в формы.

Есть ли другой вариант?

Model.py код

Number_of_existing_programmes = models.IntegerField()

Не добавили ни одного виджета в form.py для этого поля, поэтому он по умолчанию

class Criteria1_PhDForm(ModelForm):
class Meta:
    model = m.Criteria1_PhD
    exclude = ['Criteria1']

и код в views.py

для загрузки уже предоставленных данных

phd = f.Criteria1_PhDForm(instance=m.Criteria1_PhD.objects.get(Criteria1=criteria1_get))

request.post

phd = f.Criteria1_PhDForm(request.POST)

Восстановление данных из БД в порядке, и верные данные возвращаются, но они не изменяются при повторной отправке

request.post не получает обновленные данные, но следующий код работает, как обычно, при обновлении данных текстового поля

m.Criteria1_PhD.objects.filter(Criteria1=criteria1_get).update(**phd.cleaned_data)

Любая помощь будет оценена. Спасибо

1 Ответ

0 голосов
/ 10 марта 2019

Нашел корень проблемы, когда я проводил дополнительное тестирование.

Я использовал разные модели с одинаковыми именами полей

как это

class Criteria3_Major_projects(models.Model):
grade = models.IntegerField()

class Criteria3_Minor_projects(models.Model):
grade = models.IntegerField()

И, видимо, форма брала поля с таким же именем в шаблоне, как это

<td><input type="number" name="grade" value="547" required id="id_grade"></td>

и поэтому все поля из разных моделей имеют одно и то же имя, поэтому request.post передавал значение из последнего поля этого имени из шаблонов

Все поля обновлялись при обновлении последнего поля ввода этого типа и имени.

Надеюсь, мой ответ ясен.

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