from django.contrib.contenttypes.generic import GenericInlineModelAdmin
from django.http import HttpResponse
import time
+from datetime import date
class ProfileInline(admin.StackedInline):
model = Profile
list_filter = ('period', 'date_added')
class ConferenceAdmin(admin.ModelAdmin):
- exclude = ['readers']
+ exclude = ['readers', 'keywords']
search_fields = ['public_id', 'id']
filter_vertical = ['docs_description',
'suggested_seminars', 'suggested_conferences']
actions = ['export_conference']
+ def render_change_form(self, request, context, *args, **kwargs):
+ """
+ Filter queryset to improve performance
+ """
+ instance = context.get('original')
+ current_year = date.today().year
+ years = (str(current_year), str(current_year - 1))
+ current_values = []
+ if instance:
+ current_values = [doc.id for doc in instance.docs_description.all()]
+ context['adminform'].form.fields['docs_description'].queryset = Document.objects.filter(
+ Q(period__name__in=years) |
+ Q(id__in=current_values)
+ )
+ if instance:
+ current_values = [doc.id for doc in instance.suggested_seminars.all()]
+ context['adminform'].form.fields['suggested_seminars'].queryset = Seminar.objects.filter(
+ Q(private=2) |
+ Q(id__in=current_values)
+ )
+ if instance:
+ current_values = [doc.id for doc in instance.suggested_conferences.all()]
+ context['adminform'].form.fields['suggested_conferences'].queryset = Conference.objects.filter(
+ Q(status=2) |
+ Q(id__in=current_values)
+ )
+ return super(ConferenceAdmin, self).render_change_form(request, context, *args, **kwargs)
+
def export_conference(self, request, queryset):
response = HttpResponse(content_type='text/csv')
filename = "conferences"
model = Question
class SeminarAdmin(admin.ModelAdmin):
+ exclude = ['keywords']
inlines = [SeminarQuestionInline,]
filter_horizontal = ['professor',]
filter_vertical = ['docs_description', 'docs_1',
search_fields = ['course__title', 'title', 'sub_title']
list_filter = ('period', 'publish_date', 'expiry_date')
actions = ['clone_seminars', 'export_seminar']
- # raw_id_fields = ['docs_description', 'docs_1',
- # 'docs_2', 'docs_correct', 'medias', 'media_preview',
- # 'suggested_seminars', 'suggested_conferences', 'quiz', 'conference']
-
+ # raw_id_fields = [ 'media_preview',
+ # 'quiz', 'conference']
+
+ def render_change_form(self, request, context, *args, **kwargs):
+ """
+ Filter queryset to improve performance
+ """
+ instance = context.get('original')
+ current_year = date.today().year
+ years = (str(current_year), str(current_year - 1))
+ # Documents
+ for fieldname in ('docs_description', 'docs_1', 'docs_2', 'docs_correct'):
+ current_values = []
+ if instance:
+ current_values = getattr(instance, fieldname).all()
+ context['adminform'].form.fields[fieldname].queryset = Document.objects.filter(
+ Q(period__name__in=years) |
+ Q(id__in=[doc.id for doc in current_values])
+ )
+
+ # Medias
+ current_values = []
+ if instance:
+ current_values = instance.medias.all()
+ context['adminform'].form.fields['medias'].queryset = Media.objects.filter(
+ Q(date_modified__gte=datetime.date(current_year - 1, 1, 1)) |
+ Q(id__in=[media.id for media in current_values])
+ )
+ preview_id = None
+ if instance and instance.media_preview:
+ preview_id = instance.media_preview.id
+ context['adminform'].form.fields['media_preview'].queryset = Media.objects.filter(
+ Q(date_modified__gte=datetime.date(current_year - 1, 1, 1)) |
+ Q(id=preview_id)
+ )
+
+ # Suggested seminars / conferences
+ if instance:
+ current_values = [doc.id for doc in instance.suggested_seminars.all()]
+ context['adminform'].form.fields['suggested_seminars'].queryset = Seminar.objects.filter(
+ Q(private=2) |
+ Q(id__in=current_values)
+ )
+ if instance:
+ current_values = [doc.id for doc in instance.suggested_conferences.all()]
+ context['adminform'].form.fields['suggested_conferences'].queryset = Conference.objects.filter(
+ Q(status=2) |
+ Q(id__in=current_values)
+ )
+ return super(SeminarAdmin, self).render_change_form(request, context, *args, **kwargs)
def clone_seminars(self, request, queryset):
log = ""