Как показать динамический выпадающий в Django? - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу показать номер банковского счета сотрудника на основе сохраненных банковских реквизитов при добавлении зарплаты.Но теперь я получаю номер банковского счета всего сотрудника, а не только выбранный.ниже - мой forms.py

Я пытался установить поле в forms.py, но я не знаю, как фильтровать, используя идентификатор сотрудника в этом.

class SalaryCreateForm(forms.ModelForm):
        class Meta:
            model = Salary_Rotation
            fields = ('Sal_Emp_Desig', 'Payment_Mode_of_Salary', 'Emp_Acc_number', 'Cheque_Number', 'Transaction_Number', 'P_Tax', 'Salary_Amount', 'Salary_Date')

    def __init__(self, *args, **kwargs):
        super(SalaryCreateForm,self).__init__(*args, **kwargs)
        self.fields['Sal_Emp_Desig'].queryset = Designation.objects.filter(Is_Del=0)
        self.fields['Emp_Acc_number'].queryset = Employee_Bank_Detail.objects.filter(Is_Del=0)

ниже - мой шаблон

<form class="form-group" method="POST">
                                        {% csrf_token %}
                                        <label class="control-label"> Employee Name:- </label>
                                        <input class="form-control" value="{{emp.Emp_Name}}" type="text" name="compnay" readonly/ >
                                        <label class="control-label"> Company Name:- </label>
                                        <input class="form-control" value="{{emp.Emp_company}}" type="text" name="compnay" readonly/ >

                                             <label>Bank Account</label>
                                            <select id="id_Emp_Acc_number" name="Emp_Acc_number" class="form-control" >
                                                    <option value="" selected="">---------</option>


                                            {% for acc_num in bank_acc_numbers %}
                                            <option value="{{acc_num.id}}" >{{ acc_num.Emp_Acc_num }}</option>
                                            {% endfor %}
                                        </select>
                                        {%endfor%}

                                        {{ form|crispy }}
                                        <button class="btn btn-rounded btn-success" type="submit">Add Experience</button>

                            {% for emp in employees%}
                                    <a href="{% url 'employee-detail' emp.id %}" class="btn btn-rounded btn-brand ml-4">Cancel</a>
                                {%endfor%}
                                    </form>

ниже - мой view.py

class SalaryCraeteView(LoginRequiredMixin,SuccessMessageMixin,CreateView):
    #permission_required = 'Company.add_company'
    model=Salary_Rotation
    success_message = " Salary added successfully!"
    reverse_lazy('employee-detail')
    login_url= "login"
    template_name = 'employee_salary_form.html'
    form_class = SalaryCreateForm
    def form_valid(self,form,**kwargs):
        form.instance.Sal_Crt_By = self.request.user
        form.instance.Is_Del =0

def get_context_data(self, **kwargs):
    kwargs['employees'] = Employee.objects.filter(pk=self.kwargs['pk'])
    kwargs['bank_acc_numbers'] = Employee_Bank_Detail.objects.filter(Emp_Bank_id=self.kwargs['pk']).filter(Is_Del=0)

    return super(SalaryCraeteView, self).get_context_data(**kwargs)

Я хочу показать значения в раскрывающемся списке на основе банковских данных сотрудника, не все банковские реквизиты сотрудника.

1 Ответ

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

Вы можете отправить used_id из представления в форму, используя метод get_form_kwargs (), например

class SalaryCreateView(...):
...
    def get_form_kwargs(self):
        kwargs = super(SalaryCreateView, self).get_form_kwargs()
        kwargs['user_id'] = self.request.user.pk
        return kwargs

, и применить этот user_id в фильтре, например

class SalaryCreateForm(forms.ModelForm):
...
    def __init__(self, *args, **kwargs):
        self.user_id=kwargs.pop('user_id')
        self.fields['Emp_Acc_number'].queryset = Employee_Bank_Detail.objects.filter(Is_Del=0, <user_id_field>=self.user_id)
...