from django.contrib import admin from django_admin_relation_links import AdminChangeLinksMixin from django.contrib.auth.models import Group, User from django.contrib.auth.admin import UserAdmin from api.models import Order, LNPayment, Profile, MarketTick, Currency admin.site.unregister(Group) admin.site.unregister(User) class ProfileInline(admin.StackedInline): model = Profile can_delete = False fields = ("avatar_tag", ) readonly_fields = ["avatar_tag"] show_change_link = True # extended users with avatars @admin.register(User) class EUserAdmin(AdminChangeLinksMixin, UserAdmin): inlines = [ProfileInline] list_display = ( "avatar_tag", "id", "profile_link", "username", "last_login", "date_joined", "is_staff", ) list_display_links = ("id", "username") change_links = ( "profile", ) ordering = ("-id", ) def avatar_tag(self, obj): return obj.profile.avatar_tag() @admin.register(Order) class OrderAdmin(AdminChangeLinksMixin, admin.ModelAdmin): list_display = ( "id", "type", "maker_link", "taker_link", "status", "amt", "currency_link", "t0_satoshis", "is_disputed", "is_fiat_sent", "created_at", "expires_at", "payout_link", "maker_bond_link", "taker_bond_link", "trade_escrow_link", ) list_display_links = ("id", "type") change_links = ( "maker", "taker", "currency", "payout", "maker_bond", "taker_bond", "trade_escrow", ) list_filter = ("is_disputed", "is_fiat_sent", "type", "currency", "status") search_fields = ["id","amount","min_amount","max_amount"] def amt(self, obj): if obj.has_range and obj.amount == None: return str(float(obj.min_amount))+"-"+ str(float(obj.max_amount)) else: return float(obj.amount) @admin.register(LNPayment) class LNPaymentAdmin(AdminChangeLinksMixin, admin.ModelAdmin): list_display = ( "hash", "concept", "status", "num_satoshis", "fee", "type", "expires_at", "expiry_height", "sender_link", "receiver_link", "order_made_link", "order_taken_link", "order_escrow_link", "order_paid_link", ) list_display_links = ("hash", "concept") change_links = ( "sender", "receiver", "order_made", "order_taken", "order_escrow", "order_paid", ) list_filter = ("type", "concept", "status") ordering = ("-expires_at", ) search_fields = ["payment_hash","num_satoshis","sender__username","receiver__username","description"] @admin.register(Profile) class UserProfileAdmin(AdminChangeLinksMixin, admin.ModelAdmin): list_display = ( "avatar_tag", "id", "user_link", "is_referred", "telegram_enabled", "total_contracts", "pending_rewards", "earned_rewards", "claimed_rewards", "platform_rating", "total_ratings", "avg_rating", "num_disputes", "lost_disputes", ) list_editable = ["pending_rewards", "earned_rewards"] list_display_links = ("avatar_tag", "id") change_links = ["user"] readonly_fields = ["avatar_tag"] search_fields = ["user__username","id"] @admin.register(Currency) class CurrencieAdmin(admin.ModelAdmin): list_display = ("id", "currency", "exchange_rate", "timestamp") list_display_links = ("id", "currency") readonly_fields = ("currency", "exchange_rate", "timestamp") ordering = ("id", ) @admin.register(MarketTick) class MarketTickAdmin(admin.ModelAdmin): list_display = ("timestamp", "price", "volume", "premium", "currency", "fee") readonly_fields = ("timestamp", "price", "volume", "premium", "currency", "fee") list_filter = ["currency"] ordering = ("-timestamp", )