Как фильтровать формы в django?
Я пытаюсь сделать рейтинговую систему с помощью django. Итак, у меня есть:
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)
region = models.ForeignKey(Region,
related_name='regions',
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 f"{self.rating}"
Это моя модель. На первой странице пользователь должен выбрать регион, после чего должна открыться форма с полями продавец, телефон и рейтинг. Причем поля продавец должны показывать тех продавцов, которые работают в выбранном регионе.
Мой файл forms.py находится здесь:
class RateAddForm(ModelForm):
class Meta:
model = Rating
exclude = ('region',)
def __init__(self, region=None, **kwargs):
super(RateAddForm, self).__init__(**kwargs)
if region:
self.fields['salesman'].queryset = Salesman.objects.filter(region=region)
Но все равно он показывает мне всех продавцов, независимо от их региона.
Мой views.py здесь, я не могу взять регион, где я должен правильно добавить регион?:
def report_add(request, region_slug):
region = get_object_or_404(Region, slug=region_slug)
if request.method == 'POST':
form = RateAddForm(request.POST)
if form.is_valid():
message = "Thanks!"
form.save()
return HttpResponse(message)
else:
form = RateAddForm()
else:
form = RateAddForm(request.POST)
return render(request,
'account/report.html',
{'form': form})
Есть ли что-то, что я упустил, или вы можете посоветовать какой-нибудь хороший метод? Заранее спасибо за помощь! :)