Student, Training)
from .models.messages import GroupedMessage, StudentGroup
from .views.crfpa import CorrectorXLSBook, UserXLSBook
+from .views.core import get_default_period
class PeriodListFilter(SimpleListFilter):
title = _('period')
# Parameter for the filter that will be used in the URL query.
- parameter_name = 'period__id'
+ parameter_name = 'period'
def lookups(self, request, model_admin):
"""
`self.value()`.
"""
if self.value():
- try:
- value = int(self.value())
- except ValueError:
- return queryset
- return queryset.filter(period__id=value)
+ return queryset.filter(trainings__period__name=self.value())
else:
return queryset
class MediaTranscodedInline(admin.TabularInline):
model = MediaTranscoded
+@admin.action(description='Duplicate selected medias')
+def duplicate_medias(modeladmin, request, queryset):
+ for media in queryset:
+ transcoded_files = list(media.transcoded.values_list('file', flat=True))
+ media.id = None
+ media.save()
+ transcoded = [MediaTranscoded(file=file, item_id=media.id) for file in transcoded_files]
+ MediaTranscoded.objects.bulk_create(transcoded)
class MediaAdmin(admin.ModelAdmin):
+
+ def get_form(self, request, obj=None, **kwargs):
+ form = super(MediaAdmin, self).get_form(request, obj, **kwargs)
+ periods = Period.objects.all()
+ period = get_default_period(periods)
+ form.base_fields['conference'].queryset = Conference.objects.filter(period=period)
+ return form
+
+ list_per_page = 30
exclude = ['readers']
search_fields = ['id', 'title', 'course__title', 'course__code']
- list_filter = (ConferenceDateBeginFilter, )
+ list_filter = ['course', 'course_type', 'period', 'type', 'date_added', ConferenceDateBeginFilter, ]
inlines = [MediaTranscodedInline]
+ actions = [duplicate_medias,]
+ exlude = ['readers', ]
+
+
+class MediaInline(admin.StackedInline):
+ model = Media
+ exclude = ['readers', ]
+
+@admin.action(description='Publish selected conferences')
+def publish_conferences(modeladmin, request, queryset):
+ for conference in queryset:
+ for media in conference.media.all():
+ media.is_published = True
+ media.save()
+
+
+@admin.action(description='Duplicate selected conferences')
+def duplicate_conferences(modeladmin, request, queryset):
+ for conference in queryset:
+ original_pid = conference.public_id
+ medias = deepcopy(conference.media.all())
+ conference.pk = None
+ conference.public_id = None
+ conference.comment += '\nCopy of ' + original_pid
+ conference.save()
+ for media in medias:
+ media.pk = None
+ media.save()
+ media.conference = conference
+ media.save()
class ConferenceAdmin(admin.ModelAdmin):
+ inlines = [MediaInline,]
exclude = ['readers']
- list_filter = ('course', 'period', 'date_begin', 'session')
+ list_per_page = 30
+ list_filter = ('course', 'period', 'date_begin', 'session', 'course_type')
search_fields = ['public_id', 'id',
'course__code', 'course__title', 'session']
+ actions = [publish_conferences, duplicate_conferences]
+ list_display = ['__str__', 'date_begin', 'status', 'public_id', 'comment']
+
# class SeminarQuestionInline(admin.StackedInline):