Exporter API: Fix primary key fields

This commit is contained in:
Raphael Michel
2020-11-19 11:28:21 +01:00
parent 627f601bdb
commit 5a95550075
2 changed files with 17 additions and 3 deletions

View File

@@ -53,6 +53,13 @@ class ExporterSerializer(serializers.Serializer):
input_parameters = SerializerDescriptionField(source='_serializer') input_parameters = SerializerDescriptionField(source='_serializer')
class PrimaryKeyRelatedField(serializers.PrimaryKeyRelatedField):
def to_representation(self, value):
if isinstance(value, int):
return value
return super().to_representation(value)
class JobRunSerializer(serializers.Serializer): class JobRunSerializer(serializers.Serializer):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
ex = kwargs.pop('exporter') ex = kwargs.pop('exporter')
@@ -78,7 +85,7 @@ class JobRunSerializer(serializers.Serializer):
break break
if isinstance(v, forms.ModelMultipleChoiceField): if isinstance(v, forms.ModelMultipleChoiceField):
self.fields[k] = serializers.PrimaryKeyRelatedField( self.fields[k] = PrimaryKeyRelatedField(
queryset=v.queryset, queryset=v.queryset,
required=v.required, required=v.required,
allow_empty=not v.required, allow_empty=not v.required,
@@ -86,7 +93,7 @@ class JobRunSerializer(serializers.Serializer):
many=True many=True
) )
elif isinstance(v, forms.ModelChoiceField): elif isinstance(v, forms.ModelChoiceField):
self.fields[k] = serializers.PrimaryKeyRelatedField( self.fields[k] = PrimaryKeyRelatedField(
queryset=v.queryset, queryset=v.queryset,
required=v.required, required=v.required,
allow_null=not v.required, allow_null=not v.required,
@@ -108,3 +115,10 @@ class JobRunSerializer(serializers.Serializer):
) )
else: else:
self.fields[k] = FormFieldWrapperField(form_field=v, required=v.required, allow_null=not v.required) self.fields[k] = FormFieldWrapperField(form_field=v, required=v.required, allow_null=not v.required)
def to_internal_value(self, data):
for k, v in self.fields.items():
if isinstance(v, serializers.ManyRelatedField) and k not in data:
data[k] = []
data = super().to_internal_value(data)
return data

View File

@@ -85,7 +85,7 @@ def test_org_validate_events(token_client, organizer, team, event):
'_format': 'xlsx', '_format': 'xlsx',
}, format='json') }, format='json')
assert resp.status_code == 400 assert resp.status_code == 400
assert resp.data == {"events": ["This field is required."]} assert resp.data == {"events": ["This list may not be empty."]}
resp = token_client.post('/api/v1/organizers/{}/exporters/orderlist/run/'.format(organizer.slug), data={ resp = token_client.post('/api/v1/organizers/{}/exporters/orderlist/run/'.format(organizer.slug), data={
'_format': 'xlsx', '_format': 'xlsx',