我想尝试在员工和区域之间建立关系。每个员工必须访问多个区域,并且该区域取决于城市。我使用外键(多对一)在城市和区域之间建立了关系。我必须为单个员工添加多个区域,但是,我使用了员工与区域之间的许多关系。在员工注册时,当我从“城市”下拉列表中选择城市时,区域列表未更改。显示所有区域。 这是我的员工表格
class EmployeeForm(forms.ModelForm):
class Meta():
model =Employee
fields = ('code','first_name','last_name','designation','report_to','join_date','leave_date','city','area','username','password','status','address')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['area'].queryset = Area.objects.none()
if 'city' in self.data:
try:
city_id = int(self.data.get('city'))
self.fields['area'].queryset = Area.objects.filter(city_id=city_id).order_by('name')
except (ValueError, TypeError):
pass # invalid input from the client; ignore and fallback to empty City queryset
elif self.instance.pk:
self.fields['area'].queryset = self.instance.city.area_set.order_by('name')
模型是
class Employee(models.Model):
code = models.CharField(max_length = 256)
# name = models.CharField(max_length = 256)
designation =models.ForeignKey(Designation,on_delete=models.CASCADE)
report_to = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE)
area = models.ManyToManyField(Area, through ='EmployeeArea',)
city = models.ForeignKey(City, on_delete=models.CASCADE, null=True, blank=True,)
status = models.BooleanField(default = True)
join_date = models.DateField(default=datetime.datetime.now)
leave_date = models.DateField(blank = True, null=True)
username = models.CharField(max_length = 256)
password = models.CharField(max_length = 256)
first_name = models.CharField(max_length = 256)
last_name = models.CharField(max_length = 256)
class City(models.Model):
name = models.CharField(max_length=256)
def __str__(self):
return self.name
class Area(models.Model):
name = models.CharField(max_length=256)
city = models.ForeignKey(City, on_delete=models.CASCADE)
def __str__(self):
return self.name
如果我建立了错误的恋爱关系,请引导我。