Форма выбора HTML с возможностью ввода значения не сохраняет введенное значение как поле объекта в Django - PullRequest
0 голосов
/ 01 октября 2019

У меня есть форма Django, в которой у меня есть несколько раскрывающихся меню, в которых есть возможность ввести пользовательское значение. Чтобы ввести пользовательское значение, я использую следующую реализацию, чтобы переключать текстовое поле всякий раз, когда пользовательское значение выбирается из этой реализации http://jsfiddle.net/6nq7w/4/

Всякий раз, когда я выбираю параметр из раскрывающегося списка и сохраняюформа, значение объекта модели (в данном случае это EmployeeInformation.dept) сохраняет выбранное значение, но это не тот случай, если я ввожу пользовательское значение.

В приведенном ниже примере я использую цепочкуреализация раскрывающегося списка для загрузки отдела на основе идентификатора отдела.

Например - Допустим, при заполнении формы я выбираю значение Продажи , а затем значение EmployeeInformation.dept = Sales, тогда как при выбореопцию как Enter Manually и введите новое значение, скажем DeptXYZ объект модели Django не принимает это введенное вручную значение в качестве данных для поля Dept.

models.py

class EmployeeInformation(models.Model):
    name = models.Charfield(max_length=30,null=False, blank=False)
    dept_id = models.ForeignKey(DepartmentInformation, on_delete=models.SET_NULL, null=True)
    dept = models.ForeignKey(SubDeptInformation, on_delete=models.SET_NULL, null=True)
    salary = models.DecimalField(null=True, blank=True, decimal_places=2, max_digits=10)

form.html

<!DOCTYPE html>
<html>
<script>
function toggleField(hideObj,showObj){
  hideObj.disabled=true;        
  hideObj.style.display='none';
  showObj.disabled=false;   
  showObj.style.display='inline';
  showObj.focus();
}
</script>
<body>
<form name="EmployeeInformation" action="#">
Department: <select name="browser" 
          onchange="if(this.options[this.selectedIndex].value=='Enter Manually'){
              toggleField(this,this.nextSibling);
              this.selectedIndex='0';
          }">
            <option></option>
            <option value="Enter Manually">[Enter Manually]</option>
            <option>HR</option>
            <option>Sales</option>
            <option>Finance</option>
        </select><input name="Dept" style="display:none;" disabled="disabled" 
            onblur="if(this.value==''){toggleField(this,this.previousSibling);}">
<input type="submit" value="Submit">
</form>
</body>
</html>

views.py

class AddEmployeeInfo(CreateView):
    model = EmployeeInformation
    form_class = EmployeeForm
    template_name = 'form.html'
    success_url = reverse_lazy('employee_list')

Как сохранить введенное вручную значение в качестве значения поля объекта модели, т. Е. В моем example EmployeeInformation.dept.name

Спасибо за любую помощь заранее !!

1 Ответ

0 голосов
/ 01 октября 2019

DeptXYZ или любой введенный вручную отдел не существует в базе данных.

dept имеет отношение ForeignKey с моделью EmployeeInformation. Следовательно, для хранения DeptXYZ или любого другого отдела, введенного вручную, отдел должен существовать в базе данных. Поскольку DeptXYZ отсутствует в базе данных, вместо этого Django хранит null.

Чтобы сохранить DeptXYZ или любой другой отдел, введенный вручную, вам необходимо сначала создать соответствующий отдел. Вам нужно будет переопределить метод form_valid() для AddEmployeeInfo, как описано здесь , чтобы сначала создать и сохранить введенный вручную отдел.

Надеюсь, эта помощь!

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