Files
guilan-ace-backend/apps/events/resources.py
Amirhossein Khalili 88b793ed9f
Some checks failed
Backend CI/CD / test (push) Has been cancelled
Backend CI/CD / deploy (push) Has been cancelled
initial commit
2026-05-19 20:53:08 +03:30

87 lines
2.7 KiB
Python

from import_export import resources, fields
from import_export.widgets import ForeignKeyWidget, ManyToManyWidget
from apps.events.models import Event, Registration
from apps.users.models import User
from apps.gallery.models import Gallery
from apps.payments.models import DiscountCode
class EventResource(resources.ModelResource):
gallery_images = fields.Field(
column_name='gallery_images',
attribute='gallery_images',
widget=ManyToManyWidget(Gallery, field='title', separator='|')
)
class Meta:
model = Event
fields = (
'id', 'title', 'slug', 'description', 'start_time', 'end_time',
'event_type', 'address', 'location', 'online_link', 'status',
'capacity', 'price', 'registration_start_date', 'registration_end_date',
'featured_image', 'gallery_images', 'created_at', 'updated_at',
'is_deleted', 'deleted_at'
)
export_order = fields
class RegistrationResource(resources.ModelResource):
"""Export registrations with user attributes and shortened ticket identifiers."""
event = fields.Field(
column_name='event',
attribute='event',
widget=ForeignKeyWidget(Event, 'title')
)
user_username = fields.Field(
column_name='user_username',
attribute='user',
widget=ForeignKeyWidget(User, 'username')
)
user_email = fields.Field(
column_name='user_email',
attribute='user',
widget=ForeignKeyWidget(User, 'email')
)
user_first_name = fields.Field(
column_name='user_first_name',
attribute='user',
widget=ForeignKeyWidget(User, 'first_name')
)
user_last_name = fields.Field(
column_name='user_last_name',
attribute='user',
widget=ForeignKeyWidget(User, 'last_name')
)
discount_code = fields.Field(
column_name='discount_code',
attribute='discount_code',
widget=ForeignKeyWidget(DiscountCode, 'code')
)
class Meta:
model = Registration
fields = (
'id',
'event',
'user_username',
'user_email',
'user_first_name',
'user_last_name',
'registered_at',
'status',
'ticket_id',
'discount_code',
'discount_amount',
'final_price',
'created_at',
'updated_at',
'is_deleted',
'deleted_at',
)
export_order = fields
def dehydrate_ticket_id(self, obj):
"""Limit ticket identifiers to eight characters in exports."""
val = getattr(obj, 'ticket_id', '')
return str(val)[:8] if val else ''