, поэтому я работаю над приложением django, где у меня есть модель Event.Каждое событие имеет некоторые атрибуты, скажем, одним из них является «имя хоста» (которое я буду использовать повсеместно в качестве примера).Мне нужно реализовать функцию поиска, где пользователь может искать все события, которые имеют имя хоста == some_value, например имя хоста == "myhost.foo.bar".
Теперь я хотел позволить пользователю выбирать средидопустимые параметры (т. е. имена хостов, которые фактически существуют в одном или нескольких событиях) в поле со списком в форме поиска, поэтому я использую ModelChoiceFields для своей формы.Мой подкласс ModelChoiceView для отображения правильной метки:
class HostnameModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return obj.host.hostname
Моя форма:
class QueryForm(forms.Form):
hostname = HostnameModelChoiceField(queryset=Event.objects.all(), required=False)
...
Однако это дает дубликаты, поскольку многие события могут иметь одно и то же имя хоста.Я попытался использовать «Different ()» в наборе запросов, но, конечно, это не сработает, потому что объекты различны (даже если отображаемые значения не являются).
Итак, я попытался вместо этого выбрать только значенияМне нужно:
class QueryForm(forms.Form):
hostname = ModelChoiceField(queryset=Event.objects.all().values_list("hostname", "hostname").distinct(), required=False)
Но это не подтвердится!Я подозреваю, потому что значения не являются фактическими экземплярами Event, а просто строковыми значениями.
Поэтому я попробовал обычный ChoiceField:
hostname = forms.ChoiceField(choices=Event.objects.all().values_list("hostname", "hostname").distinct(), required=False)
Это работает, НО этот список заполняется только один раз, поэтомуне в курсе с базой данных.
Итак ... Есть ли хороший способ решения этой проблемы?Напомним вопрос: КАК мне заполнить поле со списком отличительными значениями от одного из полей модели, а также поддерживать его синхронизацию с базой данных?Я бы подумал, что ModelChoiceField был бы лучшим выбором, если бы я мог заставить его проверять при использовании .values (...) или .values_list (...).
С уважением, Hallgeir