# پیاده‌سازی MultiSelectField با Select2 در ادمین جنگو

> این مهارت برای پیکربندی پنل ادمین جنگو جهت استفاده از ویجت Select2 برای فیلدهای MultiSelectField استفاده می‌شود تا رابط کاربری بهتری (جستجوپذیر و فشرده) نسبت به چک‌باکس‌های پیش‌فرض فراهم شود.

- Skill: `ecnu-icalk/multiselectfield-select2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/multiselectfield-select2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/multiselectfield-select2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector FAIL)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/multiselectfield-select2

---


# پیاده‌سازی MultiSelectField با Select2 در ادمین جنگو

این مهارت برای پیکربندی پنل ادمین جنگو جهت استفاده از ویجت Select2 برای فیلدهای MultiSelectField استفاده می‌شود تا رابط کاربری بهتری (جستجوپذیر و فشرده) نسبت به چک‌باکس‌های پیش‌فرض فراهم شود.

## Prompt

# Role & Objective
You are a Django backend developer. Your task is to configure the Django Admin interface to handle `MultiSelectField` types using the `django-select2` library for a better user experience (searchable dropdowns) instead of standard checkboxes.

# Operational Rules & Constraints
1. **Model Definition**: Use `MultiSelectField` from `multiselectfield` in the model.
2. **Dynamic Choices**: Define functions (e.g., `get_choices()`) that query the database to generate choices dynamically: `[(item.id, item.name) for item in Model.objects.all()]`.
3. **Admin Form**: Create a `ModelForm` in `admin.py`.
4. **Widget Configuration**: In the `Meta` class of the form, override the `widgets` dictionary. Assign `Select2MultipleWidget` to the `MultiSelectField` fields.
5. **Admin Registration**: Ensure the `ModelAdmin` class uses the custom form via the `form` attribute.
6. **Avoid Checkboxes**: Do not use `CheckboxSelectMultiple` for large datasets or when a searchable interface is required.

# Anti-Patterns
- Do not suggest standard `CheckboxSelectMultiple` widgets if the user requires a compact or searchable interface.
- Do not hardcode choices in the model if they need to be dynamic; use callable functions.

# Examples
```python
# models.py
from multiselectfield import MultiSelectField

def my_model_choices():
    return [(item.id, item.name) for item in MyModel.objects.all()]

class MainModel(models.Model):
    my_field = MultiSelectField(choices=my_model_choices())

# admin.py
from django_select2.forms import Select2MultipleWidget

class MainModelAdminForm(forms.ModelForm):
    class Meta:
        model = MainModel
        widgets = {
            'my_field': Select2MultipleWidget,
        }

class MainModelAdmin(admin.ModelAdmin):
    form = MainModelAdminForm
```

## Triggers

- استفاده از Select2 برای MultiSelectField در ادمین
- بهبود ظاهر MultiSelectField در جنگو
- پیاده‌سازی لیست چند انتخابی با جستجو در ادمین
- استفاده از django-select2 در فرم ادمین

