Администратор Django добавляет форму отображения поля объекта из связанной модели - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть следующая модель:

class Company(models.Model):
    company_name = models.CharField(verbose_name="Company", max_length=200)


class Department(models.Model):
    name = models.CharField(verbose_name="Department", max_length=255)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)

class Employee(models.Model):

    external_id = models.CharField(max_length=50, null=True, blank=True)
    name = models.CharField(max_length=100)  
    department = models.ForeignKey(Department, on_delete=models.CASCADE)

Я пытаюсь, чтобы у моей формы «Добавить сотрудника» помимо Отдела был выбран соответствующий выбор для Компании.

Поэтому, когда я выбираю Компанию, я получаю выбориз его отделов.

В настоящее время у меня есть выбор из всех отделов.

Приложение в значительной степени ориентировано на администраторов, поэтому было бы хорошо иметь эту функцию.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Вы можете попробовать использовать автозаполнение django light.Вот документы .

. Это даст вам возможность отображать параметры в дочернем фильтре на основе выбора в родительском фильтре с помощью его параметра forward.

Создайте класс формы с настраиваемым полем компании, а затем перенаправьте поле в фильтр отдела следующим образом:

class EmployeeForm(forms.ModelForm):
    company = forms.ModelChoiceField(queryset=Company.objects.all(), 
                                 widget=autocomplete.ModelSelect2(url='your_company_auto_url'),
                                 required=False)
    department = forms.ModelChoiceField(queryset=Department.objects.all(),
                                    widget=autocomplete.ModelSelect2(url='your_department_auto_url',
                                                                     forward=['company']))

    class Meta:
        model = Employee
        fields = '__all__'

Вид отдела:

class DepartmentAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        if not self.request.user.is_authenticated():
            return Department.objects.none()

        qs = Department.objects.all()

        company = self.forwarded.get('company', None)

        if company:
            qs = qs.filter(company=company)

        if self.q:
            qs = qs.filter(name__istartswith=self.q)
        return qs

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

Надеюсь, это поможет.

0 голосов
/ 18 декабря 2018

IMO, возможно, вам нужно изменить «Klijent» на «Company», интересно, для чего используется «Klijent»?

...