Заполнитель на зависимом выпадающем фильтре
У меня есть фильтр django с зависимым выпадающим списком для фильтрации производителей и моделей автомобилей. Модели используют поле charfield и извлекают автомобили из записи в базе данных.
Я бы хотел, чтобы на уважаемых полях было написано manufacture
и model
.
Я не могу найти много информации в Интернете о том, как это сделать. Единственное сообщение, которое я могу найти, относится к использованию поля выбора в модели, которое не работает для меня.
фильтр
class CarFilterForm(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['model'].queryset = Post.objects.none()
if 'model_manufacture_id' in self.data:
try:
model_manufacture_id = int(self.data.get('model_manufacture_id'))
self.fields['model_id'].queryset = CarModels.objects.filter(model_manufacture_id=model_manufacture_id)
except (ValueError, TypeError):
pass
class carFilter(django_filters.FilterSet):
class Meta:
model = Post
fields = 'manufacture', 'model'
form = CarFilterForm
html
<form method="get" id="AllCarsForm" data-cars-url="{% url 'ajax-allcars' %}">
{% render_field myFilter.form.manufacture class="cars-filter-widget" %}
{% render_field myFilter.form.model class="cars-filter-widget" %}
<button class="btn btn-primary" type="submit">Search</button>
</form>
Самый простой способ сделать это - установить поле модели по умолчанию на то, которое соответствует вашим полям.
Пример:
class Model(models.Model):
field = models.CharField(max_length=25, choices=CHOICES,
default=DEFAULT, blank=True)
Вы также можете сделать это в формах:
self.fields['field'].choices = [('', 'Placeholder Text')] + list(
self.fields['field'].choices[1:])
Попробуйте установить empty_label
для полей:
self.fields['your_field'].empty_label = 'My custom empty label'