Как я могу сделать этот фильтр

Я хочу создать фильтр для автомобилей по меткам, и не знаю почему, я получаю пустой шаблон со списком объектов У меня есть эта модель с моделью Foreignkey mark для получения марки для определенного автомобиля

class Product(models.Model):

    ENGINE_CHOICES = (
    ('Бензин', 'Бензин'),
    ('Дизель', 'Дизель'),
    )

    code = models.AutoField(primary_key=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE)
    mark = models.ForeignKey(Mark, on_delete=models.CASCADE, related_name='mark')
    model = models.CharField(max_length=45)
    color = models.CharField(max_length=45)
    availability = models.BooleanField()
    price = models.PositiveIntegerField()
    image = models.CharField(max_length=64, null=True)
    slug = models.SlugField(blank=True)
    year = models.PositiveSmallIntegerField("Дата выхода", default=2019, null=True)
    draft = models.BooleanField('Черновик', default=False)
    cat = models.ForeignKey(Category, verbose_name='Категории', on_delete=models.PROTECT, null=True)
    description = models.TextField(max_length=500, null=True)
    engine = models.CharField(choices=ENGINE_CHOICES, max_length=20, blank=True, null=True)

А эта модель

class Mark(models.Model):
    code = models.AutoField(primary_key=True)
    title = models.CharField(max_length=45)

    def __str__(self):
        return self.title

У меня есть этот компонент в html для получения отметки в vews

      <div id="myDropdown7" class="dropdown-content">
        {% for mark in marks %}
          <form action="{% url 'filtration_marks' %}" method="GET">
            <label class='dropdown-content-menu'>
              <input id='checkbox1' type="checkbox" class='checkbox' name="mark" value="{{ mark.title }}">
              <label for='checkbox1'></label>
              <button type="submit" style="border: 0; background-color: white; font-size: 16px;">{{ mark.title }}</button>
          </label>
        </form>
          {% endfor %}

И этот метод в представлениях, которые обрабатывают запрос

def filtration_marks(request):

    products = Product.objects.filter(mark__in=request.GET.getlist('mark'))
    categories = Category.objects.all()
    marks = Mark.objects.all()

    context = {
        'products': products,
        'categories': categories,
        'marks': marks,
    }

    return render(request, 'filtration.html', context=context)

Вы должны фильтровать по title из mark, так:

products = Product.objects.filter(mark__title__in=request.GET.getlist('mark'))

Если запрос содержит список идентификаторов code в вашем случае, то фильтр будет таким:

products = Product.objects.filter(mark_code__in=request.GET.getlist('mark'))

Однако, если бы в запросе был список названий, то он был бы таким:

products = Product.objects.filter(mark__title__in=request.GET.getlist('mark'))
Вернуться на верх