Я хочу попытаться построить отношения между работником и территорией. Каждый сотрудник должен посетить более одного района, и этот район зависит от города. Я построил отношения между городом и областью с иностранным ключом (многие-к-одному). Я должен добавить больше чем одну область к одному сотруднику, однако я использовал много отношений между сотрудником и областью. На момент регистрации сотрудника, когда я выбираю город из выпадающего списка «Город», список области не изменяется. Все области показаны. Это моя форма сотрудника
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
, если я вступил в неправильные отношения, тогда, пожалуйста, направьте меня.