Итак, у меня есть простая модель объявления и FilterView, показывающий все объявления. Объявления могут быть отфильтрованы по разным тегам, хранящимся в отдельной модели, к которой присоединяется ManyToManyField.
Я использую django -фильтр, чтобы настроить небольшой ModelMultipleChoiceFilter и позволить пользователям выбирать разные теги для фильтрации объявлений. Это работает, однако он использует тег __id. Я хотел бы использовать поле tag__slug.
Поэтому я добавил атрибут "to_field_name = 'slug'", но получаю следующее:
Ожидается поле 'id' номер, но получил 'diner'.
Следующий код работает, но фильтрует только по tag__id, например:
/? tags = 6
и я бы предпочел что-то подобное;
? Tags = diner
models.py
class Ad(models.Model):
category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)
description = RichTextField()
tags = models.ManyToManyField('Tag')
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200, null=True)
class Meta:
ordering = ['-title']
def __str__(self):
return self.title
class Tag(models.Model):
name = models.CharField(max_length=200, help_text='Titel van de tag')
slug = models.SlugField(max_length=200, null=True)
def __str__(self):
return self.name
filters.py
from django import forms
from discovery.grid.models import Ad, Tag
import django_filters
class AdFilter(django_filters.FilterSet):
tags = django_filters.ModelMultipleChoiceFilter(
# to_field_name='slug',
queryset=Tag.objects.all(),
widget=forms.CheckboxSelectMultiple)
class Meta:
model = Ad
fields = [
'tags'
]
Как мне достичь фильтрация по названию модели или слагу вместо id?
С наилучшими пожеланиями,