Фильтрация форм в 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").

(Это то, что я делаю, когда мне нужно фильтровать в формах администратора)

Вернуться на верх