django-select2
ArrayField
işlemek için bir yol sunar Select2 kullanıyor. Onların belgelerinde, örneğin ArrayField
içindir:
http://django-select2.readthedocs.io/en/latest/django_select2.html#django_select2.forms.Select2TagWidget
zaten seçili değerlerini işlemek için:
class ArrayFieldWidget(Select2TagWidget):
def render_options(self, *args, **kwargs):
try:
selected_choices, = args
except ValueError: # Signature contained `choices` prior to Django 1.10
choices, selected_choices = args
output = ['<option></option>' if not self.is_required and not self.allow_multiple_selected else '']
selected_choices = {force_text(v) for v in selected_choices.split(',')}
choices = {(v, v) for v in selected_choices}
for option_value, option_label in choices:
output.append(self.render_option(selected_choices, option_value, option_label))
return '\n'.join(output)
def value_from_datadict(self, data, files, name):
values = super().value_from_datadict(data, files, name)
return ",".join(values)
Formunuza widget eklemek için:
class MyForm(ModelForm):
class Meta:
fields = ['my_array_field']
widgets = {
'my_array_field': ArrayFieldWidget
}
Eksik bir şey? Varsayılan yönetici widget'ını gerçekten nerede geçersiz kılıyorsunuz? Weblog'dan alıntıladığınız alıntı, oldukça sınırlı ArrayField'ı faydalı bir işe dönüştürür ve çok iyi çalışır. Ancak, bulduğunuz yönetici widget'inin en iyi şekilde kullanılmasını görmek güzel olurdu. Select2'ye bir şeyler verebilirim. – Marakai
Daha eksiksiz olması için örneği genişlettim. – ropable