Задайте значения для поля формы по запросу, используя фильтр - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу установить элемент в раскрывающемся списке, используя запрос в форме.Я хочу добавить сотрудника и выбрать компанию, которая использует фильтр Is_Del = 0. Я не знаю, как установить значения для раскрывающегося списка и где написать этот запрос.

Я пытался поместить в Forms.py,но это не работает.

Это form.py

class EmployeeCreateForm(forms.ModelForm):
     class Meta:
        model = Employee
        fields = ('Emp_Name','Emp_company','Emp_Dept','Emp_Join_Date', 'Emp_End_Date')

        def clean(self):
            cleaned_data = super(EmployeeCreateForm, self).clean()
            Emp_Name = cleaned_data.get('Emp_Name')
            Emp_company = cleaned_data.get('Emp_company')
            Emp_Dept = cleaned_data.get('Emp_Dept')
            Emp_Join_Date = cleaned_data.get('Emp_Join_Date')
            Emp_End_Date = cleaned_data.get('Emp_End_Date')
            return cleaned_data

     def __init__(self, *args, **kwargs):
        super(EmployeeCreateForm,self).__init__(*args, **kwargs)
        self.fields['Emp_company'].queryset = Company.objects.filter(Is_Del=0)

и ниже мой view.py

class EmployeeCraeteView(LoginRequiredMixin,SuccessMessageMixin,CreateView):
    model=Employee
    form = EmployeeCreateForm
    success_message = " Employee Craeted successfully!"
    success_url="../../company/all-companies"
    template_name = 'employee_form.html'
    fields =[
            'Emp_Name','Emp_company','Emp_Dept','Emp_Join_Date',
            'Emp_End_Date'
            ]
    companies= Company.objects.filter(Is_Del=0)

    def form_valid(self,form):
        form.instance.Emp_Crt_By = self.request.user
        if form.cleaned_data['Emp_Join_Date'] >= form.cleaned_data['Emp_End_Date']:
            form.add_error('Emp_End_Date', 'Joining date should be less than Ending date')
            return self.form_invalid(form)
        return super(EmployeeCraeteView, self).form_valid(form)

Я хочу показать только эти компании вформа, которую фильтрует Is_Del = 0

1 Ответ

0 голосов
/ 05 февраля 2019

Ваш EmployeeCreateView неверен:

  • Удалите атрибуты form, fields и companies
  • Добавить form_class = EmployeeCreateForm.

Причина в том, что form ничего не делает в CreateView (см. здесь ).Чтобы использовать пользовательский класс формы, вам нужно передать его в form_class.

Ваш CreateView динамически создавал форму, используя modelform_factory с указанным вами fields (если бы вы не добавили их, вы бы сразу увидели свою ошибку) и, таким образом, EmployeeCreateFormникогда не создается.

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