Фильтрация форм в Django
Я делаю небольшой проект для оценки продавцов. У меня есть регионы и в каждом регионе есть свои продавцы. Таким образом, если выбран регион "blahblah", форма должна показать выбор продавцов, которые относятся к этому региону. Я нашел несколько ответов на stackoverflow, но форма все равно показывает всех продавцов, независимо от их регионов.
Моя модель такова:
class Region(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, unique=True)
def __str__(self):
return self.name
class Salesman(models.Model):
region = models.ForeignKey(Region,
related_name='region',
on_delete=models.CASCADE)
name = models.CharField(max_length=40)
surname = models.CharField(max_length=40)
def __str__(self):
return self.name
class Rating(models.Model):
RATING_CHOICES = [(i, str(i)) for i in range(1,6)]
salesman = models.ForeignKey(Salesman,
related_name='salesman',
on_delete=models.CASCADE)
phone = models.CharField(max_length=15, blank=True)
rating = models.IntegerField(choices=RATING_CHOICES, blank=False)
sent_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.phone
Я нашел модифицированный __init__ метод для моего forms.py:
class RateAddForm(forms.ModelForm):
class Meta:
model = Rating
def __init__(self, region_id=None, **kwargs):
super(RateAddForm, self).__init__(**kwargs)
if region_id:
self.fields['salesman'].queryset = Salesman.objects.filter(region=region_id)
А также мой views.py выглядит так:
def report_add(request, region_id):
if request.method == 'POST':
print(region_id)
form = RateAddForm(request.POST, region_id=region_id)
if form.is_valid():
message = "Thanks!"
form.save()
return HttpResponse(message)
else:
print("Something went wrong!")
form = RateAddForm()
else:
form = RateAddForm(request.POST)
return render(request,
'account/report.html',
{'form': form})
По-прежнему показывает всех продавцов в моей базе данных, даже если я выбираю регион. Как решить эту проблему, чтобы форма показывала только продавцов выбранного региона. Заранее спасибо!
Попробуйте установить self.base_fields['salesman'].queryset вместо
self.fields['salesman'].queryset (т.е. "base_fields" вместо "fields").
(Это то, что я делаю, когда мне нужно фильтровать в формах администратора)