forked from CGM_Public/pretix_original
Exporter API: Fix primary key fields
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user