101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from django.contrib import admin
 | 
						|
from django.utils.translation import ugettext as _
 | 
						|
from games.forms import GameForm
 | 
						|
from games.models import Game
 | 
						|
from games.models import Platform
 | 
						|
from games.models import Timeline
 | 
						|
 | 
						|
 | 
						|
class PlatformAdmin(admin.ModelAdmin):
 | 
						|
    list_display = ('shortname', 'name')
 | 
						|
 | 
						|
 | 
						|
class StatusFilter(admin.SimpleListFilter):
 | 
						|
    """
 | 
						|
    Remove CREATED status.
 | 
						|
    """
 | 
						|
    title = _('state')
 | 
						|
    parameter_name = 'status'
 | 
						|
 | 
						|
    def lookups(self, request, model_admin):
 | 
						|
        """
 | 
						|
        Return only games choices (not CREATED from Item abstract class).
 | 
						|
        """
 | 
						|
        return Game.STATUS_CHOICES
 | 
						|
 | 
						|
    def queryset(self, request, queryset):
 | 
						|
        """
 | 
						|
        Filter on 'status' field.
 | 
						|
        """
 | 
						|
        if self.value():
 | 
						|
            return queryset.filter(status=self.value())
 | 
						|
        else:
 | 
						|
            return queryset
 | 
						|
 | 
						|
 | 
						|
class PlatformFilter(admin.SimpleListFilter):
 | 
						|
    """
 | 
						|
    Display Platform shortname.
 | 
						|
    """
 | 
						|
    title = _('platform')
 | 
						|
    parameter_name = 'collection'
 | 
						|
 | 
						|
    def lookups(self, request, model_admin):
 | 
						|
        """
 | 
						|
        Get all platforms
 | 
						|
        """
 | 
						|
        return [(x.id, x.shortname) for x in Platform.objects.all()]
 | 
						|
 | 
						|
    def queryset(self, request, queryset):
 | 
						|
        """
 | 
						|
        Filter on 'shortname' field.
 | 
						|
        """
 | 
						|
        if self.value():
 | 
						|
            return queryset.filter(collection__id=self.value())
 | 
						|
        else:
 | 
						|
            return queryset
 | 
						|
 | 
						|
 | 
						|
class GameAdmin(admin.ModelAdmin):
 | 
						|
    list_display = ('name', 'get_platform', 'playing', 'status', 'wish')
 | 
						|
    list_filter = [StatusFilter, PlatformFilter, 'playing', 'wish']
 | 
						|
    search_fields = ('name', )
 | 
						|
    fieldsets = [(_('Game Information'), {
 | 
						|
        'fields': [('name', 'collection')]
 | 
						|
    }), (_('Progress'), {
 | 
						|
        'fields': [('status'), ('achievement', 'achievement_max'), ('note')]
 | 
						|
    }), ('', {
 | 
						|
        'fields': [('playing'), ('unplayed'), ('wish')]
 | 
						|
    })]
 | 
						|
 | 
						|
    form = GameForm
 | 
						|
 | 
						|
    def get_platform(self, obj):
 | 
						|
        """
 | 
						|
        Display platform shortname
 | 
						|
        """
 | 
						|
        return obj.collection.shortname
 | 
						|
 | 
						|
    get_platform.short_description = _('Platform')
 | 
						|
    get_platform.admin_order_field = 'collection__shortname'
 | 
						|
 | 
						|
 | 
						|
class TimelineAdmin(admin.ModelAdmin):
 | 
						|
    list_display = ('date', 'status', 'item', 'get_platform')
 | 
						|
    search_fields = ('item__name', )
 | 
						|
    list_filter = ('item__collection__shortname', )
 | 
						|
 | 
						|
    def get_platform(self, obj):
 | 
						|
        """
 | 
						|
        Display platform shortname
 | 
						|
        """
 | 
						|
        return obj.item.collection.shortname
 | 
						|
 | 
						|
    get_platform.short_description = _('Platform')
 | 
						|
    get_platform.admin_order_field = ('item__collection__shortname')
 | 
						|
 | 
						|
 | 
						|
admin.site.register(Platform, PlatformAdmin)
 | 
						|
admin.site.register(Game, GameAdmin)
 | 
						|
admin.site.register(Timeline, TimelineAdmin)
 |