mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Add API for badge and ticket layout assignments
This commit is contained in:
@@ -6,7 +6,13 @@ from pretix.api.serializers.order import CompatibleJSONField
|
||||
from .models import BadgeItem, BadgeLayout
|
||||
|
||||
|
||||
class ItemAssignmentSerializer(I18nAwareModelSerializer):
|
||||
class BadgeItemAssignmentSerializer(I18nAwareModelSerializer):
|
||||
class Meta:
|
||||
model = BadgeItem
|
||||
fields = ('id', 'item', 'layout')
|
||||
|
||||
|
||||
class NestedItemAssignmentSerializer(I18nAwareModelSerializer):
|
||||
class Meta:
|
||||
model = BadgeItem
|
||||
fields = ('item',)
|
||||
@@ -14,7 +20,7 @@ class ItemAssignmentSerializer(I18nAwareModelSerializer):
|
||||
|
||||
class BadgeLayoutSerializer(I18nAwareModelSerializer):
|
||||
layout = CompatibleJSONField()
|
||||
item_assignments = ItemAssignmentSerializer(many=True)
|
||||
item_assignments = NestedItemAssignmentSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = BadgeLayout
|
||||
@@ -28,3 +34,12 @@ class BadgeLayoutViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
|
||||
def get_queryset(self):
|
||||
return self.request.event.badge_layouts.all()
|
||||
|
||||
|
||||
class BadgeItemViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
serializer_class = BadgeItemAssignmentSerializer
|
||||
queryset = BadgeItem.objects.none()
|
||||
lookup_field = 'id'
|
||||
|
||||
def get_queryset(self):
|
||||
return BadgeItem.objects.filter(item__event=self.request.event)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from django.conf.urls import url
|
||||
|
||||
from pretix.api.urls import event_router
|
||||
from pretix.plugins.badges.api import BadgeLayoutViewSet
|
||||
from pretix.plugins.badges.api import BadgeItemViewSet, BadgeLayoutViewSet
|
||||
|
||||
from .views import (
|
||||
LayoutCreate, LayoutDelete, LayoutEditorView, LayoutListView,
|
||||
@@ -23,3 +23,4 @@ urlpatterns = [
|
||||
LayoutEditorView.as_view(), name='edit'),
|
||||
]
|
||||
event_router.register('badgelayouts', BadgeLayoutViewSet)
|
||||
event_router.register('badgeitems', BadgeItemViewSet)
|
||||
|
||||
@@ -8,6 +8,13 @@ from .models import TicketLayout, TicketLayoutItem
|
||||
|
||||
class ItemAssignmentSerializer(I18nAwareModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = TicketLayoutItem
|
||||
fields = ('id', 'layout', 'item', 'sales_channel')
|
||||
|
||||
|
||||
class NestedItemAssignmentSerializer(I18nAwareModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = TicketLayoutItem
|
||||
fields = ('item', 'sales_channel')
|
||||
@@ -15,7 +22,7 @@ class ItemAssignmentSerializer(I18nAwareModelSerializer):
|
||||
|
||||
class TicketLayoutSerializer(I18nAwareModelSerializer):
|
||||
layout = CompatibleJSONField()
|
||||
item_assignments = ItemAssignmentSerializer(many=True)
|
||||
item_assignments = NestedItemAssignmentSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = TicketLayout
|
||||
@@ -29,3 +36,12 @@ class TicketLayoutViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
|
||||
def get_queryset(self):
|
||||
return self.request.event.ticket_layouts.all()
|
||||
|
||||
|
||||
class TicketLayoutItemViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
serializer_class = ItemAssignmentSerializer
|
||||
queryset = TicketLayoutItem.objects.none()
|
||||
lookup_field = 'id'
|
||||
|
||||
def get_queryset(self):
|
||||
return TicketLayoutItem.objects.filter(item__event=self.request.event)
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
from django.conf.urls import url
|
||||
|
||||
from pretix.api.urls import event_router
|
||||
from pretix.plugins.ticketoutputpdf.api import TicketLayoutViewSet
|
||||
from pretix.plugins.ticketoutputpdf.api import (
|
||||
TicketLayoutItemViewSet, TicketLayoutViewSet,
|
||||
)
|
||||
from pretix.plugins.ticketoutputpdf.views import (
|
||||
LayoutCreate, LayoutDelete, LayoutEditorView, LayoutGetDefault,
|
||||
LayoutListView, LayoutSetDefault,
|
||||
@@ -22,3 +24,4 @@ urlpatterns = [
|
||||
LayoutEditorView.as_view(), name='edit'),
|
||||
]
|
||||
event_router.register('ticketlayouts', TicketLayoutViewSet)
|
||||
event_router.register('ticketlayoutitems', TicketLayoutItemViewSet)
|
||||
|
||||
@@ -46,6 +46,11 @@ def test_api_list(env, client):
|
||||
env[0].slug, env[0].organizer.slug)).content.decode('utf-8')
|
||||
)
|
||||
assert r['results'] == [res]
|
||||
r = json.loads(
|
||||
client.get('/api/v1/organizers/{}/events/{}/badgeitems/'.format(
|
||||
env[0].slug, env[0].organizer.slug)).content.decode('utf-8')
|
||||
)
|
||||
assert r['results'] == [{'item': env[3].pk, 'layout': env[2].pk, 'id': env[2].item_assignments.first().pk}]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
||||
@@ -46,6 +46,12 @@ def test_api_list(env, client):
|
||||
env[0].slug, env[0].organizer.slug)).content.decode('utf-8')
|
||||
)
|
||||
assert r['results'] == [res]
|
||||
r = json.loads(
|
||||
client.get('/api/v1/organizers/{}/events/{}/ticketlayoutitems/'.format(
|
||||
env[0].slug, env[0].organizer.slug)).content.decode('utf-8')
|
||||
)
|
||||
assert r['results'] == [{'item': env[3].pk, 'layout': env[2].pk, 'id': env[2].item_assignments.first().pk,
|
||||
'sales_channel': 'web'}]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
||||
Reference in New Issue
Block a user