mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-11-03 18:43:04 +00:00 
			
		
		
		
	Convert the whole request to json at once on select widget
This commit is contained in:
		@@ -165,9 +165,8 @@ export abstract class AjaxSelect extends AutoCompleteSelectBase {
 | 
			
		||||
 | 
			
		||||
  connectedCallback() {
 | 
			
		||||
    /* Capture initial values before they get moved to the inner node and overridden by tom-select */
 | 
			
		||||
    this.initialValues = Array.from(this.children)
 | 
			
		||||
      .filter((child: Element) => child.tagName.toLowerCase() === "slot")
 | 
			
		||||
      .map((slot) => JSON.parse(slot.innerHTML));
 | 
			
		||||
    const initial = this.querySelector("slot[name='initial']")?.textContent;
 | 
			
		||||
    this.initialValues = initial ? JSON.parse(initial) : [];
 | 
			
		||||
 | 
			
		||||
    super.connectedCallback();
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,5 +9,5 @@
 | 
			
		||||
  <optgroup label="{{ group_name }}">{% endif %}{% for widget in group_choices %}
 | 
			
		||||
    {% include widget.template_name %}{% endfor %}{% if group_name %}
 | 
			
		||||
      </optgroup>{% endif %}{% endfor %}
 | 
			
		||||
{% for sel in selected %}<slot style="display: none">{{ sel }}</slot>{% endfor %}
 | 
			
		||||
{% if initial %}<slot style="display:none" name="initial">{{ initial }}</slot>{% endif %}
 | 
			
		||||
</{{ component }}>
 | 
			
		||||
@@ -2,6 +2,7 @@ from django.contrib.staticfiles.storage import staticfiles_storage
 | 
			
		||||
from django.db.models import Model
 | 
			
		||||
from django.forms import Select, SelectMultiple
 | 
			
		||||
from ninja import ModelSchema
 | 
			
		||||
from pydantic import TypeAdapter
 | 
			
		||||
 | 
			
		||||
from core.models import Group, SithFile, User
 | 
			
		||||
from core.schemas import GroupSchema, SithFileSchema, UserProfileSchema
 | 
			
		||||
@@ -46,20 +47,22 @@ class AutoCompleteSelectMixin:
 | 
			
		||||
            "css": [staticfiles_storage.url(file) for file in self.css],
 | 
			
		||||
        }
 | 
			
		||||
        if self.is_ajax:
 | 
			
		||||
            context["selected"] = [
 | 
			
		||||
                self.schema.from_orm(obj).model_dump_json()
 | 
			
		||||
                for obj in self.model.objects.filter(
 | 
			
		||||
                    **{
 | 
			
		||||
                        f"{self.pk}__in": [
 | 
			
		||||
                            pk
 | 
			
		||||
                            for pk in context["widget"]["value"]
 | 
			
		||||
                            if str(
 | 
			
		||||
            adapter = TypeAdapter(list[self.schema])
 | 
			
		||||
            context["initial"] = adapter.dump_json(
 | 
			
		||||
                adapter.validate_python(
 | 
			
		||||
                    self.model.objects.filter(
 | 
			
		||||
                        **{
 | 
			
		||||
                            f"{self.pk}__in": [
 | 
			
		||||
                                pk
 | 
			
		||||
                            ).isdigit()  # We filter empty values for create views
 | 
			
		||||
                        ]
 | 
			
		||||
                    }
 | 
			
		||||
                ).all()
 | 
			
		||||
            ]
 | 
			
		||||
                                for pk in context["widget"]["value"]
 | 
			
		||||
                                if str(
 | 
			
		||||
                                    pk
 | 
			
		||||
                                ).isdigit()  # We filter empty values for create views
 | 
			
		||||
                            ]
 | 
			
		||||
                        }
 | 
			
		||||
                    ).all()
 | 
			
		||||
                )
 | 
			
		||||
            ).decode("utf-8")
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user