admin.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from django.conf import settings
  2. from django.contrib import admin
  3. from django.utils.html import format_html
  4. from .models import StripePrice, StripeProduct, StripeSubscription
  5. from .utils import get_stripe_link
  6. class StripeBaseAdmin(admin.ModelAdmin):
  7. def has_add_permission(self, request, obj=None):
  8. return False
  9. def stripe_link(self, obj):
  10. return format_html(
  11. '<a href="{}" target="_blank">{}</a>',
  12. get_stripe_link(obj.stripe_id),
  13. obj.stripe_id,
  14. )
  15. def get_readonly_fields(self, request, obj=None):
  16. return (
  17. list(self.readonly_fields)
  18. + [field.name for field in obj._meta.fields]
  19. + [field.name for field in obj._meta.many_to_many]
  20. + ["stripe_link"]
  21. )
  22. class StripePriceInline(admin.StackedInline):
  23. model = StripePrice
  24. extra = 0
  25. readonly_fields = ["stripe_id", "nickname", "price"]
  26. class StripeProductAdmin(StripeBaseAdmin):
  27. list_display = ["stripe_id", "name", "events", "default_price", "is_public"]
  28. inlines = [StripePriceInline]
  29. class StripeSubscriptionAdmin(StripeBaseAdmin):
  30. list_display = [
  31. "stripe_id",
  32. "organization",
  33. "product",
  34. "current_period_start",
  35. "current_period_end",
  36. "is_active",
  37. ]
  38. list_filter = ["is_active", "product"]
  39. if settings.BILLING_ENABLED:
  40. admin.site.register(StripeSubscription, StripeSubscriptionAdmin)
  41. admin.site.register(StripeProduct, StripeProductAdmin)