django_program.registration.admin

Django admin configuration for the registration app.

Classes

AddOnAdmin

Admin interface for managing add-ons.

AttendeeAdmin

Admin interface for viewing and managing conference attendees.

BadgeAdmin

Read-only admin for viewing generated badges.

BadgeTemplateAdmin

Admin interface for managing badge layout templates.

CartAdmin

Admin interface for viewing shopping carts.

CartItemInline

Inline display of cart items within the cart admin.

CheckInAdmin

Admin interface for viewing conference check-in records.

CreditAdmin

Admin interface for managing store credits.

DiscountForCategoryAdmin

Admin for category-wide percentage discounts.

DiscountForProductAdmin

Admin for direct product discounts.

DoorCheckAdmin

Admin interface for viewing per-product door check records.

EventProcessingExceptionAdmin

Read-only admin for webhook processing errors.

GroupMemberConditionAdmin

Admin for group-membership-based discount conditions.

IncludedProductConditionAdmin

Admin for included-product discount conditions.

OrderAdmin

Admin interface for managing orders.

OrderLineItemInline

Inline display of order line items within the order admin.

PaymentInline

Inline display of payments within the order admin.

ProductRedemptionAdmin

Read-only admin for viewing product redemption audit records.

PurchaseOrderAdmin

Admin interface for managing corporate purchase orders.

PurchaseOrderCreditNoteInline

Read-only inline display of credit notes issued against a purchase order.

PurchaseOrderLineItemInline

Inline display of purchase order line items.

PurchaseOrderPaymentInline

Read-only inline display of payments recorded against a purchase order.

SpeakerConditionAdmin

Admin for speaker-based discount conditions.

StripeCustomerAdmin

Read-only admin for Stripe customer mappings.

StripeEventAdmin

Read-only admin for Stripe webhook events.

TerminalPaymentAdmin

Read-only admin for Stripe Terminal payment records.

TicketTypeAdmin

Admin interface for managing ticket types.

TimeOrStockLimitConditionAdmin

Admin for time-window and stock-limited conditions.

VoucherAdmin

Admin interface for managing vouchers.

class django_program.registration.admin.AttendeeAdmin[source]

Bases: ModelAdmin

Admin interface for viewing and managing conference attendees.

list_display = ('user', 'conference', 'access_code', 'completed_registration', 'checked_in_at')
list_filter = ('conference', 'completed_registration')
search_fields = ('user__username', 'user__email', 'access_code')
readonly_fields = ('access_code',)
property media
class django_program.registration.admin.TicketTypeAdmin[source]

Bases: ModelAdmin

Admin interface for managing ticket types.

Provides filtering by conference and active status, search by name and slug, and auto-population of the slug from the ticket name.

list_display = ('name', 'conference', 'price', 'is_active', 'bulk_enabled', 'order')
list_filter = ('conference', 'is_active', 'bulk_enabled')
search_fields = ('name', 'slug')
prepopulated_fields = {'slug': ('name',)}
property media
class django_program.registration.admin.AddOnAdmin[source]

Bases: ModelAdmin

Admin interface for managing add-ons.

Uses filter_horizontal for the requires_ticket_types many-to-many field to provide a friendlier selection widget.

list_display = ('name', 'conference', 'price', 'is_active', 'bulk_enabled')
list_filter = ('conference', 'is_active', 'bulk_enabled')
search_fields = ('name', 'slug')
prepopulated_fields = {'slug': ('name',)}
filter_horizontal = ('requires_ticket_types',)
property media
class django_program.registration.admin.VoucherAdmin[source]

Bases: ModelAdmin

Admin interface for managing vouchers.

Displays usage counts alongside the voucher configuration and allows filtering by conference, type, and active status.

list_display = ('code', 'conference', 'voucher_type', 'discount_value', 'times_used', 'max_uses', 'is_active')
list_filter = ('conference', 'voucher_type', 'is_active')
search_fields = ('code',)
filter_horizontal = ('applicable_ticket_types', 'applicable_addons')
property media
class django_program.registration.admin.CartItemInline[source]

Bases: TabularInline

Inline display of cart items within the cart admin.

Items are shown as read-only since they are managed through the storefront, not directly in the admin.

model

alias of CartItem

extra = 0
readonly_fields = ('ticket_type', 'addon', 'quantity')
property media
class django_program.registration.admin.CartAdmin[source]

Bases: ModelAdmin

Admin interface for viewing shopping carts.

Carts are primarily managed by the storefront; the admin provides a read-oriented view with inline cart items.

list_display = ('user', 'conference', 'status', 'voucher', 'expires_at')
list_filter = ('conference', 'status')
inlines = (<class 'django_program.registration.admin.CartItemInline'>,)
property media
class django_program.registration.admin.OrderLineItemInline[source]

Bases: TabularInline

Inline display of order line items within the order admin.

Line items are immutable snapshots from checkout and are shown read-only.

model

alias of OrderLineItem

extra = 0
readonly_fields = ('description', 'quantity', 'unit_price', 'discount_amount', 'line_total', 'ticket_type', 'addon')
property media
class django_program.registration.admin.PaymentInline[source]

Bases: TabularInline

Inline display of payments within the order admin.

model

alias of Payment

extra = 0
property media
class django_program.registration.admin.OrderAdmin[source]

Bases: ModelAdmin

Admin interface for managing orders.

Displays order reference, user, status, and financial totals. Money fields are read-only to prevent accidental edits; changes should flow through the payment and refund workflows instead.

list_display = ('reference', 'user', 'conference', 'status', 'total', 'created_at')
list_filter = ('conference', 'status')
search_fields = ('reference', 'user__email', 'billing_email')
readonly_fields = ('subtotal', 'discount_amount', 'total')
inlines = (<class 'django_program.registration.admin.OrderLineItemInline'>, <class 'django_program.registration.admin.PaymentInline'>)
property media
class django_program.registration.admin.CreditAdmin[source]

Bases: ModelAdmin

Admin interface for managing store credits.

Provides filtering by conference and credit status, and displays the amount and creation date at a glance.

list_display = ('user', 'conference', 'amount', 'status', 'created_at')
list_filter = ('conference', 'status')
property media
class django_program.registration.admin.StripeCustomerAdmin[source]

Bases: ModelAdmin

Read-only admin for Stripe customer mappings.

list_display = ('user', 'conference', 'stripe_customer_id', 'created_at')
list_filter = ('conference',)
search_fields = ('user__email', 'stripe_customer_id')
readonly_fields = ('user', 'conference', 'stripe_customer_id', 'created_at')
has_add_permission(request)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:

request (HttpRequest)

Return type:

bool

has_change_permission(request, obj=None)[source]

Return True if the given request has permission to change the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to change the obj model instance. If obj is None, this should return True if the given request has permission to change any object of the given type.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.StripeEventAdmin[source]

Bases: ModelAdmin

Read-only admin for Stripe webhook events.

list_display = ('stripe_id', 'kind', 'processed', 'livemode', 'created_at')
list_filter = ('kind', 'processed', 'livemode')
search_fields = ('stripe_id', 'customer_id')
readonly_fields = ('stripe_id', 'kind', 'livemode', 'payload', 'customer_id', 'processed', 'api_version', 'created_at')
has_add_permission(request)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:

request (HttpRequest)

Return type:

bool

has_change_permission(request, obj=None)[source]

Return True if the given request has permission to change the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to change the obj model instance. If obj is None, this should return True if the given request has permission to change any object of the given type.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.EventProcessingExceptionAdmin[source]

Bases: ModelAdmin

Read-only admin for webhook processing errors.

list_display = ('message', 'event', 'created_at')
list_filter = ('created_at',)
search_fields = ('message',)
readonly_fields = ('event', 'data', 'message', 'traceback', 'created_at')
has_add_permission(request)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:

request (HttpRequest)

Return type:

bool

has_change_permission(request, obj=None)[source]

Return True if the given request has permission to change the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to change the obj model instance. If obj is None, this should return True if the given request has permission to change any object of the given type.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.TimeOrStockLimitConditionAdmin[source]

Bases: ModelAdmin

Admin for time-window and stock-limited conditions.

list_display = ('name', 'conference', 'is_active', 'priority', 'discount_type', 'discount_value', 'start_time', 'end_time', 'times_used', 'limit')
list_filter = ('conference', 'is_active', 'discount_type')
search_fields = ('name',)
filter_horizontal = ('applicable_ticket_types', 'applicable_addons')
property media
class django_program.registration.admin.SpeakerConditionAdmin[source]

Bases: ModelAdmin

Admin for speaker-based discount conditions.

list_display = ('name', 'conference', 'is_active', 'priority', 'discount_type', 'discount_value', 'is_presenter', 'is_copresenter')
list_filter = ('conference', 'is_active', 'is_presenter', 'is_copresenter')
search_fields = ('name',)
filter_horizontal = ('applicable_ticket_types', 'applicable_addons')
property media
class django_program.registration.admin.GroupMemberConditionAdmin[source]

Bases: ModelAdmin

Admin for group-membership-based discount conditions.

list_display = ('name', 'conference', 'is_active', 'priority', 'discount_type', 'discount_value')
list_filter = ('conference', 'is_active')
search_fields = ('name',)
filter_horizontal = ('applicable_ticket_types', 'applicable_addons', 'groups')
property media
class django_program.registration.admin.IncludedProductConditionAdmin[source]

Bases: ModelAdmin

Admin for included-product discount conditions.

list_display = ('name', 'conference', 'is_active', 'priority', 'discount_type', 'discount_value')
list_filter = ('conference', 'is_active')
search_fields = ('name',)
filter_horizontal = ('applicable_ticket_types', 'applicable_addons', 'enabling_ticket_types')
property media
class django_program.registration.admin.DiscountForProductAdmin[source]

Bases: ModelAdmin

Admin for direct product discounts.

list_display = ('name', 'conference', 'is_active', 'priority', 'discount_type', 'discount_value', 'start_time', 'end_time', 'times_used', 'limit')
list_filter = ('conference', 'is_active', 'discount_type')
search_fields = ('name',)
filter_horizontal = ('applicable_ticket_types', 'applicable_addons')
property media
class django_program.registration.admin.DiscountForCategoryAdmin[source]

Bases: ModelAdmin

Admin for category-wide percentage discounts.

list_display = ('name', 'conference', 'is_active', 'priority', 'percentage', 'apply_to_tickets', 'apply_to_addons', 'times_used', 'limit')
list_filter = ('conference', 'is_active', 'apply_to_tickets', 'apply_to_addons')
search_fields = ('name',)
property media
class django_program.registration.admin.CheckInAdmin[source]

Bases: ModelAdmin

Admin interface for viewing conference check-in records.

list_display = ('attendee', 'conference', 'station', 'checked_in_by', 'checked_in_at')
list_filter = ('conference', 'station')
search_fields = ('attendee__user__username', 'attendee__user__email', 'attendee__access_code')
readonly_fields = ('attendee', 'conference', 'checked_in_at', 'checked_in_by', 'station', 'note')
has_add_permission(request)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:

request (HttpRequest)

Return type:

bool

has_change_permission(request, obj=None)[source]

Return True if the given request has permission to change the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to change the obj model instance. If obj is None, this should return True if the given request has permission to change any object of the given type.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.DoorCheckAdmin[source]

Bases: ModelAdmin

Admin interface for viewing per-product door check records.

list_display = ('attendee', 'conference', 'ticket_type', 'addon', 'station', 'checked_by', 'checked_at')
list_filter = ('conference', 'station')
search_fields = ('attendee__user__username', 'attendee__user__email', 'attendee__access_code')
readonly_fields = ('attendee', 'ticket_type', 'addon', 'conference', 'checked_at', 'checked_by', 'station')
has_add_permission(request)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:

request (HttpRequest)

Return type:

bool

has_change_permission(request, obj=None)[source]

Return True if the given request has permission to change the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to change the obj model instance. If obj is None, this should return True if the given request has permission to change any object of the given type.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.ProductRedemptionAdmin[source]

Bases: ModelAdmin

Read-only admin for viewing product redemption audit records.

list_display = ('attendee', 'order_line_item', 'conference', 'redeemed_by', 'redeemed_at')
list_filter = ('conference',)
search_fields = ('attendee__user__username', 'attendee__user__email', 'attendee__access_code')
readonly_fields = ('attendee', 'order_line_item', 'conference', 'redeemed_at', 'redeemed_by', 'note')
has_add_permission(request)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:

request (HttpRequest)

Return type:

bool

has_change_permission(request, obj=None)[source]

Return True if the given request has permission to change the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to change the obj model instance. If obj is None, this should return True if the given request has permission to change any object of the given type.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.BadgeTemplateAdmin[source]

Bases: ModelAdmin

Admin interface for managing badge layout templates.

list_display = ('name', 'conference', 'is_default', 'width_mm', 'height_mm')
list_filter = ('conference', 'is_default')
search_fields = ('name',)
prepopulated_fields = {'slug': ('name',)}
property media
class django_program.registration.admin.BadgeAdmin[source]

Bases: ModelAdmin

Read-only admin for viewing generated badges.

list_display = ('attendee', 'format', 'generated_at', 'created_at')
list_filter = ('format', 'generated_at')
search_fields = ('attendee__user__username', 'attendee__user__email', 'attendee__access_code')
readonly_fields = ('attendee', 'template', 'format', 'file', 'generated_at')
has_add_permission(request)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:

request (HttpRequest)

Return type:

bool

has_change_permission(request, obj=None)[source]

Return True if the given request has permission to change the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to change the obj model instance. If obj is None, this should return True if the given request has permission to change any object of the given type.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.TerminalPaymentAdmin[source]

Bases: ModelAdmin

Read-only admin for Stripe Terminal payment records.

list_display = ('payment_intent_id', 'conference', 'capture_status', 'card_brand', 'card_last4', 'reader_id', 'created_at')
list_filter = ('conference', 'capture_status', 'card_brand')
search_fields = ('payment_intent_id', 'reader_id', 'terminal_id', 'card_last4')
readonly_fields = ('payment', 'conference', 'terminal_id', 'reader_id', 'payment_intent_id', 'capture_status', 'captured_at', 'cancelled_at', 'card_brand', 'card_last4', 'receipt_url', 'created_at', 'updated_at')
has_add_permission(request)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:

request (HttpRequest)

Return type:

bool

has_change_permission(request, obj=None)[source]

Return True if the given request has permission to change the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to change the obj model instance. If obj is None, this should return True if the given request has permission to change any object of the given type.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.PurchaseOrderLineItemInline[source]

Bases: TabularInline

Inline display of purchase order line items.

Line items are pricing snapshots and line_total is read-only to prevent manual edits that would desynchronize the PO totals.

model

alias of PurchaseOrderLineItem

extra = 0
readonly_fields = ('line_total',)
property media
class django_program.registration.admin.PurchaseOrderPaymentInline[source]

Bases: TabularInline

Read-only inline display of payments recorded against a purchase order.

Payments should be recorded through the management dashboard to ensure proper status transitions. The inline is read-only to prevent bypassing the service layer invariants.

model

alias of PurchaseOrderPayment

extra = 0
readonly_fields = ('amount', 'method', 'reference', 'payment_date', 'entered_by', 'note', 'created_at')
has_add_permission(request, obj=None)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.PurchaseOrderCreditNoteInline[source]

Bases: TabularInline

Read-only inline display of credit notes issued against a purchase order.

Credit notes should be issued through the management dashboard to ensure proper status recalculation. The inline is read-only for audit integrity.

model

alias of PurchaseOrderCreditNote

extra = 0
readonly_fields = ('amount', 'reason', 'issued_by', 'created_at')
has_add_permission(request, obj=None)[source]

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

Parameters:
Return type:

bool

has_delete_permission(request, obj=None)[source]

Return True if the given request has permission to delete the given Django model instance, the default implementation doesn’t examine the obj parameter.

Can be overridden by the user in subclasses. In such case it should return True if the given request has permission to delete the obj model instance. If obj is None, this should return True if the given request has permission to delete any object of the given type.

Parameters:
Return type:

bool

property media
class django_program.registration.admin.PurchaseOrderAdmin[source]

Bases: ModelAdmin

Admin interface for managing corporate purchase orders.

Displays the PO reference, organization, status, and financial summary. Money fields are read-only to prevent manual edits; changes should flow through the payment recording and credit note workflows.

list_display = ('reference', 'organization_name', 'conference', 'status', 'total', 'balance_due_display', 'created_at')
list_filter = ('conference', 'status')
search_fields = ('reference', 'organization_name', 'contact_email')
readonly_fields = ('reference', 'subtotal', 'total', 'balance_due_display', 'total_paid_display')
inlines = (<class 'django_program.registration.admin.PurchaseOrderLineItemInline'>, <class 'django_program.registration.admin.PurchaseOrderPaymentInline'>, <class 'django_program.registration.admin.PurchaseOrderCreditNoteInline'>)
get_queryset(request)[source]

Annotate payment and credit totals to avoid N+1 aggregate queries.

Parameters:

request (HttpRequest)

Return type:

QuerySet

balance_due_display(obj)[source]

Render the computed balance due for the list and detail views.

Parameters:

obj (PurchaseOrder)

Return type:

str

total_paid_display(obj)[source]

Render the computed total paid for the detail view.

Parameters:

obj (PurchaseOrder)

Return type:

str

property media