Я переопределил метод get_results autocomplete-light следующим образом, чтобы выделить один тег жирным шрифтом:
views.py
class TagAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self, **kwargs):
qs = Tag.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
def get_results(self, context):
results_list = []
for result in context["object_list"]:
text2show = "{}"
tag_occurrences = result.org_set.count()
if tag_occurrences == 1:
text2show = '<b>{}</b>';
results_list.append({
"id": self.get_result_value(result),
"text": format_html(text2show, self.get_result_label(result)),
"selected_text": format_html(text2show, self.get_selected_result_label(result)),
})
return results_list
Все отлично работает, если я ищу тег, но если я пытаюсь просмотреть сохраненное событие, все его теги представляются без какого-либо стиля.
forms.py
class EventForm(forms.ModelForm):
class Meta:
model = Event
fields = "__all__"
widgets = {
'tags': autocomplete.ModelSelect2Multiple(url='myapp:tag-autocomplete', attrs={'data-html': True})
}
def __init__(self, *args, **kwargs):
super(EventForm, self).__init__(*args, **kwargs)
# if I try to edit an event
if self.instance:
# self.fields['tag'].queryset = ???
А это часть моего шаблона:
<form method="post" class="form-horizontal">
{% csrf_token %}
{% for field in myform %}
<div class="form-group form-group-lg">
<label for="{{ field.id_for_label }}" class="col-sm-4 control-label">{{field.label}}</label><div class="col-sm-4">
{{ field }}
</div>
</div>
{% endfor %}
{{ myform.media }}
</form>
Есть ли способ манипулирования self.fields ['tag']. Queryset queryset для отображения имен полей жирным шрифтом или другого элегантного решения?
Спасибо.
обновление
models.py
class Tag(models.Model):
name = models.CharField('Tag name', max_length=255)
class Meta:
ordering = ['name']
def __init__(self, *args, **kwargs):
return mark_safe("<b>%s</b>" % self.name)
def __str__(self):
return self.name