我有以下模型:
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)
我正在尝试使我的“添加员工”管理表单除了部门和公司的相关选择之外。
因此,当我选择“公司”时,便可以选择其部门。
目前我可以选择所有部门。
应用程序主要面向管理员,因此拥有此功能会很好。
答案 0 :(得分:1)
您可以尝试使用Django自动填充指示灯。这是docs。
这将使您能够借助其父项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
这将转发选定的company
ID,然后可以在自动完成视图中使用它来过滤部门查询集。请参考文档以创建自动完成视图以用于表单中的字段。
希望有帮助。
答案 1 :(得分:0)
IMO,也许您需要将“ Klijent”更改为“ Company”,我想知道“ Klijent”的用途是什么?