8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-12-23 15:33:45 +00:00

Fix minor issues with DAL

This commit is contained in:
Jean-Romain Garnier 2021-01-02 00:27:31 +01:00 committed by Gabriel Detraz
parent d1d75209a9
commit 4d37b4506c
6 changed files with 24 additions and 18 deletions

View file

@ -95,9 +95,11 @@ class IpListAutocomplete(AutocompleteViewMixin):
def filter_results(self): def filter_results(self):
machine_type = self.forwarded.get("machine_type", None) machine_type = self.forwarded.get("machine_type", None)
self.query_set = self.query_set.filter(interface__isnull=True) self.query_set = self.query_set.filter(interface__isnull=True)
if machine_type: if machine_type:
self.query_set = self.query_set.filter( self.query_set = self.query_set.filter(
ip_type__machinetype__id=machine_type ip_type__machinetype__id=machine_type
) )
if self.q: if self.q:
self.query_set = self.query_set.filter(Q(ipv4__startswith=self.q)) self.query_set = self.query_set.filter(Q(ipv4__startswith=self.q))

View file

@ -270,8 +270,8 @@ class AutocompleteModelMixin(autocomplete.ModelSelect2):
""" """
See https://select2.org/configuration/options-api See https://select2.org/configuration/options-api
""" """
# By default, only trigger autocompletion after 3 characters have been typed # Display the "x" button to clear the input by default
# attrs["data-minimum-input-length"] = attrs.get("data-minimum-input-length", 3) attrs["data-allow-clear"] = attrs.get("data-allow-clear", "true")
# If there are less than 10 results, just show all of them (no need to autocomplete) # If there are less than 10 results, just show all of them (no need to autocomplete)
attrs["data-minimum-results-for-search"] = attrs.get( attrs["data-minimum-results-for-search"] = attrs.get(
"data-minimum-results-for-search", 10 "data-minimum-results-for-search", 10
@ -294,8 +294,8 @@ class AutocompleteMultipleModelMixin(autocomplete.ModelSelect2Multiple):
""" """
See https://select2.org/configuration/options-api See https://select2.org/configuration/options-api
""" """
# By default, only trigger autocompletion after 3 characters have been typed # Display the "x" button to clear the input by default
# attrs["data-minimum-input-length"] = attrs.get("data-minimum-input-length", 3) attrs["data-allow-clear"] = attrs.get("data-allow-clear", "true")
# If there are less than 10 results, just show all of them (no need to autocomplete) # If there are less than 10 results, just show all of them (no need to autocomplete)
attrs["data-minimum-results-for-search"] = attrs.get( attrs["data-minimum-results-for-search"] = attrs.get(
"data-minimum-results-for-search", 10 "data-minimum-results-for-search", 10

View file

@ -182,8 +182,8 @@ class AutocompleteViewMixin(LoginRequiredMixin, autocomplete.Select2QuerySetView
query_filter = "name__icontains" # Override this if necessary query_filter = "name__icontains" # Override this if necessary
def get_queryset(self): def get_queryset(self):
can, reason, _permission, query_set = self.obj_type.can_list(self.request.user) can, reason, _permission, query_set = self.obj_type.can_list(self.request.user)
if query_set: if query_set:
self.query_set = query_set self.query_set = query_set
else: else:
@ -194,4 +194,5 @@ class AutocompleteViewMixin(LoginRequiredMixin, autocomplete.Select2QuerySetView
else: else:
if self.q: if self.q:
self.query_set = self.query_set.filter(**{self.query_filter: self.q}) self.query_set = self.query_set.filter(**{self.query_filter: self.q})
return self.query_set return self.query_set

View file

@ -39,7 +39,7 @@ See github.com/yourlabs/django-autocomplete-light/issues/1149
.select2-container--default .select2-selection--multiple .select2-selection__rendered { .select2-container--default .select2-selection--multiple .select2-selection__rendered {
height: 100% !important; height: 100% !important;
display: inline !imoortant; display: inline !important;
overflow-x: hidden !important; overflow-x: hidden !important;
overflow-y: auto !important; overflow-y: auto !important;
} }

View file

@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %} {% block content %}
{% if topoform %} {% if topoform %}
{% bootstrap_form_errors topoform %} {% bootstrap_form_errors topoform %}
{{ topoform.media }} {{ topoform.media }}
{% endif %} {% endif %}
{% if machineform %} {% if machineform %}
{% bootstrap_form_errors machineform %} {% bootstrap_form_errors machineform %}

View file

@ -44,7 +44,7 @@ class RoomAutocomplete(AutocompleteViewMixin):
# Precision on search to add annotations so search behaves more like users expect it to # Precision on search to add annotations so search behaves more like users expect it to
def filter_results(self): def filter_results(self):
# Suppose we have a dorm named Dorm, a building name B, and rooms from 001 - 999 # Suppose we have a dorm named Dorm, a building named B, and rooms from 001 - 999
# Comments explain what we try to match # Comments explain what we try to match
self.query_set = self.query_set.annotate( self.query_set = self.query_set.annotate(
full_name=Concat( full_name=Concat(
@ -87,7 +87,6 @@ class DormitoryAutocomplete(AutocompleteViewMixin):
class BuildingAutocomplete(AutocompleteViewMixin): class BuildingAutocomplete(AutocompleteViewMixin):
obj_type = Building obj_type = Building
# Precision on search to add annotations so search behaves more like users expect it to
def filter_results(self): def filter_results(self):
# We want to be able to filter by dorm so it's easier # We want to be able to filter by dorm so it's easier
self.query_set = self.query_set.annotate( self.query_set = self.query_set.annotate(
@ -108,10 +107,9 @@ class SwitchAutocomplete(AutocompleteViewMixin):
class PortAutocomplete(AutocompleteViewMixin): class PortAutocomplete(AutocompleteViewMixin):
obj_type = Port obj_type = Port
# Precision on search to add annotations so search behaves more like users expect it to
def filter_results(self): def filter_results(self):
# We want to enter the switch name, not just the port number # We want to enter the switch name, not just the port number
# Because we're concatenating a CharField and an Integer, we have to sepcify the output_field # Because we're concatenating a CharField and an Integer, we have to specify the output_field
self.query_set = self.query_set.annotate( self.query_set = self.query_set.annotate(
full_name=Concat( full_name=Concat(
"switch__name", Value(" "), "port", output_field=CharField() "switch__name", Value(" "), "port", output_field=CharField()
@ -133,23 +131,29 @@ class PortAutocomplete(AutocompleteViewMixin):
class SwitchBayAutocomplete(AutocompleteViewMixin): class SwitchBayAutocomplete(AutocompleteViewMixin):
obj_type = SwitchBay obj_type = SwitchBay
# Precision on search to add annotations so search behaves more like users expect it to
def filter_results(self): def filter_results(self):
# Comments explain what we try to match # See RoomAutocomplete.filter_results
self.query_set = self.query_set.annotate( self.query_set = self.query_set.annotate(
full_name=Concat( full_name=Concat(
"building__name", Value(" "), "name" "building__name", Value(" "), "name"
), # Match when the user searches "" ),
dorm_name=Concat( dorm_name=Concat(
"building__dormitory__name", Value(" "), "name" "building__dormitory__name", Value(" "), "name"
), # Match "Dorm Local Sud" ),
dorm_full_name=Concat( dorm_full_name=Concat(
"building__dormitory__name", "building__dormitory__name",
Value(" "), Value(" "),
"building__name", "building__name",
Value(" "), Value(" "),
"name", "name",
), # Match "Dorm J Local Sud" ),
dorm_full_colon_name=Concat(
"building__dormitory__name",
Value(" : "),
"building__name",
Value(" "),
"name",
),
).all() ).all()
if self.q: if self.q:
@ -157,10 +161,9 @@ class SwitchBayAutocomplete(AutocompleteViewMixin):
Q(full_name__icontains=self.q) Q(full_name__icontains=self.q)
| Q(dorm_name__icontains=self.q) | Q(dorm_name__icontains=self.q)
| Q(dorm_full_name__icontains=self.q) | Q(dorm_full_name__icontains=self.q)
| Q(dorm_full_colon_name__icontains=self.q)
) )
return qs
class PortProfileAutocomplete(AutocompleteViewMixin): class PortProfileAutocomplete(AutocompleteViewMixin):
obj_type = PortProfile obj_type = PortProfile