diff --git a/static/css/select2.css b/static/css/select2.css
index 0c64022..0e4dffc 100644
--- a/static/css/select2.css
+++ b/static/css/select2.css
@@ -4,4 +4,9 @@
border-radius: 3px !important;
border: 1px solid #939799 !important;
height: 100% !important;
+}
+
+.django-select2 {
+ /* Hide the default select. This may be a bug in Select2? */
+ display: none;
}
\ No newline at end of file
diff --git a/webportal/forms.py b/webportal/forms.py
index 9c56fff..4b37a3b 100644
--- a/webportal/forms.py
+++ b/webportal/forms.py
@@ -43,15 +43,3 @@ class MaterialSearchForm(forms.Form):
widget=Select2Widget(),
label="",
)
-
- def __init__(self, *args, **kwargs):
- self.request = kwargs.pop("request", None)
- super().__init__(*args, **kwargs)
- if self.request:
- self.fields["material"].queryset = Material.objects.filter(
- user=self.request.user
- )
- if prefix := kwargs.get("prefix", None):
- self.prefix = prefix
- if auto_id := kwargs.get("auto_id", None):
- self.auto_id = auto_id
diff --git a/webportal/templates/webportal/base.html b/webportal/templates/webportal/base.html
index 7df2c4c..4b5abb6 100644
--- a/webportal/templates/webportal/base.html
+++ b/webportal/templates/webportal/base.html
@@ -54,23 +54,26 @@
-
diff --git a/webportal/templates/webportal/partials/assemblies/assembly.html b/webportal/templates/webportal/partials/assemblies/assembly.html
index d31f5c4..279b311 100644
--- a/webportal/templates/webportal/partials/assemblies/assembly.html
+++ b/webportal/templates/webportal/partials/assemblies/assembly.html
@@ -9,7 +9,7 @@
hx-post="{% url 'update-assembly-name' assembly.id %}"
hx-target="#assembly-name"
hx-swap="outerHTML"
- hx-trigger="keyup delay:500ms"
+ hx-trigger="submit, focusout"
class="flex flex-1"
>
+
-
+
{% for layer_view in layer_views %}
{% block layer %}
-
-
-
-
-
-
+
+
+
+
-
-
-
- {% for segment, form in layer_view.segments_and_forms %}
-
- {% endfor %}
-
+
+
+
+ {% for segment, form in layer_view.segments_and_forms %}
+
+ {% endfor %}
+
{% endblock %}
-
{% endfor %}
-
+
{% endblock %}
-
+ {% endcomment %}
{% endif %}
diff --git a/webportal/views.py b/webportal/views.py
index a1fab71..c4e0368 100644
--- a/webportal/views.py
+++ b/webportal/views.py
@@ -28,6 +28,25 @@ class UnitSystem(Enum):
IP = "IP"
+class LayerView:
+ """A helper class to manage the Layer and its segments/forms in the Assembly view."""
+
+ def __init__(self, layer: Layer):
+ self.layer = layer
+ self.segments = layer.get_ordered_segments()
+ self.forms = [
+ MaterialSearchForm(
+ prefix=f"form_{segment.pk}",
+ initial={"material": segment.material.pk if segment.material else None},
+ )
+ for segment in self.segments
+ ]
+
+ @property
+ def segments_and_forms(self):
+ return zip(self.segments, self.forms)
+
+
@require_POST
def set_unit_system(request: WSGIRequest) -> HttpResponse:
if request.POST.get("unit-system", None):
@@ -236,19 +255,6 @@ def assemblies_page(request: WSGIRequest) -> HttpResponse:
return render(request, "webportal/assemblies.html", context)
-class LayerView:
- def __init__(self, layer: Layer):
- self.layer = layer
- self.segments = layer.get_ordered_segments()
- self.forms = [
- MaterialSearchForm(prefix=f"form_{segment.pk}") for segment in self.segments
- ]
-
- @property
- def segments_and_forms(self):
- return zip(self.segments, self.forms)
-
-
@login_required
def assembly(request: WSGIRequest, pk: int | None) -> HttpResponse:
"""The Assembly view with the sidebar.
@@ -257,7 +263,7 @@ def assembly(request: WSGIRequest, pk: int | None) -> HttpResponse:
"""
print(f">> assembly/{pk}")
- # -------------------------------------------------------------------------
+ # -----------------------------------------------------------------------------------
# -- Detail-View
this_assembly = get_object_or_404(Assembly, pk=pk)
layers: list[Layer] = this_assembly.get_ordered_layers()
@@ -269,11 +275,11 @@ def assembly(request: WSGIRequest, pk: int | None) -> HttpResponse:
"webportal/partials/assemblies/assembly.html",
context={
"assembly": this_assembly,
- "layer_views": [LayerView(layer) for layer in layers],
+ "layer_views": (LayerView(layer) for layer in layers),
},
)
- # -------------------------------------------------------------------------
+ # -----------------------------------------------------------------------------------
# -- Sidebar
sidebar_html = render_block_to_string(
"webportal/partials/assemblies/sidebar.html",
@@ -383,13 +389,16 @@ def update_layer_material(
request: WSGIRequest, assembly_pk: int, layer_pk: int
) -> HttpResponse:
print(f">> {assembly_pk}/update_layer_material/{layer_pk}")
+
layer = get_object_or_404(Layer, id=layer_pk)
+ print(">> Layer:", layer)
if request.method == "POST":
- # Select2 will return something like 'form_2-material' as the key
- if mat_id := request.POST.get(f"segment_{layer.pk}-material", None):
- new_material = Material.objects.get(id=mat_id)
- for segment in layer.segments.all():
+ for segment in layer.segments.all():
+ print(">> Segment:", segment)
+ # Select2 will return something like 'form_2-material' as the key
+ if mat_id := request.POST.get(f"form_{segment.pk}-material", None):
+ new_material = Material.objects.get(id=mat_id)
segment.material = new_material
segment.save()
- return HttpResponse(new_material.name)
+ return HttpResponse(new_material.name)
return HttpResponse()