TabbycatDebate/tabbycat

View on GitHub
tabbycat/venues/admin.py

Summary

Maintainability
A
0 mins
Test Coverage
B
88%
from django import forms
from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline
from gfklookupwidget.widgets import GfkLookupWidget

from availability.admin import RoundAvailabilityInline
from utils.admin import ModelAdmin

from .models import Venue, VenueCategory, VenueConstraint


@admin.register(Venue)
class VenueAdmin(ModelAdmin):
    list_display = ('display_name', 'priority', 'tournament', 'categories_list')
    list_filter = ('venuecategory', 'priority', 'tournament')
    search_fields = ('name',)
    inlines = (RoundAvailabilityInline,)

    def categories_list(self, obj):
        return ", ".join([c.name for c in obj.venuecategory_set.all()])

    def get_queryset(self, request):
        return super().get_queryset(request).select_related(
                'tournament').prefetch_related('venuecategory_set')


@admin.register(VenueCategory)
class VenueCategoryAdmin(ModelAdmin):
    list_display = ('name', 'description', 'display_in_venue_name',
            'display_in_public_tooltip', 'venues_list')
    ordering = ('name',)

    def venues_list(self, obj):
        return ", ".join([v.name for v in obj.venues.all()])

    def get_queryset(self, request):
        return super().get_queryset(request).prefetch_related('venues')


class VenueConstraintModelForm(forms.ModelForm):
    class Meta(object):
        model = VenueConstraint
        fields = '__all__'
        widgets = {
            'subject_id': GfkLookupWidget(
                content_type_field_name='subject_content_type',
                parent_field=VenueConstraint._meta.get_field('subject_content_type'),
            ),
        }


@admin.register(VenueConstraint)
class VenueConstraintAdmin(ModelAdmin):
    form = VenueConstraintModelForm
    list_display = ('subject', 'category', 'priority')
    search_fields = ('adjudicator__name', 'adjudicator__institution__code',
            'adjudicator__institution__name', 'team__short_name', 'team__long_name',
            'institution__name', 'institution__code',
            'category__name', 'priority')
    list_filter = ('subject_content_type', 'category', 'priority')
    ordering = ('subject_content_type', 'category')

    def get_queryset(self, request):
        return super().get_queryset(request).select_related('category').prefetch_related('subject')


# Used in participants/admin.py
class VenueConstraintInline(GenericTabularInline):
    model = VenueConstraint
    ct_field = 'subject_content_type'
    ct_fk_field = 'subject_id'
    extra = 6