mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
* Subclass MultipleChoiceField to serialize to list * Rename pretix.api.serializers.MultipleChoiceField to ListMultipleChoiceField * Keep order in ListMultipleChoiceField
30 lines
931 B
Python
30 lines
931 B
Python
from collections import OrderedDict
|
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
def remove_duplicates_from_list(data):
|
|
return list(OrderedDict.fromkeys(data))
|
|
|
|
|
|
class ListMultipleChoiceField(serializers.MultipleChoiceField):
|
|
def to_internal_value(self, data):
|
|
if isinstance(data, str) or not hasattr(data, '__iter__'):
|
|
self.fail('not_a_list', input_type=type(data).__name__)
|
|
if not self.allow_empty and len(data) == 0:
|
|
self.fail('empty')
|
|
|
|
internal_value_data = [
|
|
super(serializers.MultipleChoiceField, self).to_internal_value(item)
|
|
for item in data
|
|
]
|
|
|
|
return remove_duplicates_from_list(internal_value_data)
|
|
|
|
def to_representation(self, value):
|
|
representation_data = [
|
|
self.choice_strings_to_values.get(str(item), item) for item in value
|
|
]
|
|
|
|
return remove_duplicates_from_list(representation_data)
|