from django.contrib import admin from django.urls import reverse from django.utils.safestring import mark_safe from tracker import models from .forms import ( DonationBidForm, DonationForm, PrizeWinnerForm, DonorPrizeEntryForm, PrizeForm, ) class CustomStackedInline(admin.StackedInline): # Adds an link that lets you edit an in-line linked object def edit_link(self, instance): if instance.id is not None: url = reverse( 'admin:{label}_{merge}_change'.format( label=instance._meta.app_label, merge=instance._meta.model_name ), args=[instance.id], ) return mark_safe('<a href="{u}">Edit</a>'.format(u=url)) else: return mark_safe('Not Saved Yet') class DonationBidInline(CustomStackedInline): form = DonationBidForm model = models.DonationBid extra = 0 max_num = 100 readonly_fields = ('edit_link',) class BidInline(CustomStackedInline): model = models.Bid fieldsets = [ ( None, { 'fields': [ 'name', 'description', 'shortdescription', 'istarget', 'goal', 'state', 'total', 'edit_link', ], }, ) ] extra = 0 readonly_fields = ( 'total', 'edit_link', ) ordering = ('-total', 'name') class BidOptionInline(BidInline): verbose_name_plural = 'Options' verbose_name = 'Option' fk_name = 'parent' class BidDependentsInline(BidInline): verbose_name_plural = 'Dependent Bids' verbose_name = 'Dependent Bid' fk_name = 'biddependency' class DonationInline(CustomStackedInline): form = DonationForm model = models.Donation extra = 0 readonly_fields = ('edit_link',) class EventBidInline(BidInline): def get_queryset(self, request): qs = super(EventBidInline, self).get_queryset(request) return qs.filter(speedrun=None) class PrizeWinnerInline(CustomStackedInline): form = PrizeWinnerForm model = models.PrizeWinner readonly_fields = ['winner_email', 'edit_link'] def winner_email(self, obj): return obj.winner.email extra = 0 class DonorPrizeEntryInline(CustomStackedInline): form = DonorPrizeEntryForm model = models.DonorPrizeEntry readonly_fields = ['edit_link'] extra = 0 class PrizeInline(CustomStackedInline): model = models.Prize form = PrizeForm fk_name = 'endrun' extra = 0 fields = [ 'name', 'description', 'shortdescription', 'handler', 'image', 'altimage', 'event', 'state', 'allowed_prize_countries', 'disallowed_prize_regions', 'edit_link', ] readonly_fields = ('edit_link',)