@@ -15,6 +15,18 @@ def result_short(obj):
1515 return obj .result
1616
1717
18+ def _is_editor (request ):
19+ return not request .user .is_superuser and request .user .groups .filter (name = 'Editors' ).exists ()
20+
21+
22+ def _is_published (obj ):
23+ return obj is not None and getattr (obj , "state" , None ) == "PUB"
24+
25+
26+ editor_fields = ['question' , 'result' , 'answer' , 'hint' , 'explanation' , 'difficulty' ,
27+ 'state' , 'publish_time' , 'socials_text' , 'author_email' , 'retraction_message' ]
28+
29+
1830class QuestionAdmin (VersionAdmin ):
1931 list_display = ('pk' , 'state' , 'author_email' , 'reserved' , 'reservation_message' , question_part ,
2032 result_short , 'answer' , 'difficulty' , 'date_time' , 'publish_time' )
@@ -24,17 +36,19 @@ class QuestionAdmin(VersionAdmin):
2436
2537 def get_queryset (self , request ):
2638 qs = super ().get_queryset (request )
27- if not request . user . is_superuser and request . user . groups . filter ( name = 'Editors' ). exists ( ):
39+ if _is_editor ( request ):
2840 return qs .exclude (state = 'DRA' )
2941 return qs
3042
3143 def get_fields (self , request , obj = None ):
32- if not request . user . is_superuser and request . user . groups . filter ( name = 'Editors' ). exists ( ):
33- return [ 'question' , 'result' , 'answer' , 'hint' , 'explanation' , 'difficulty' , 'state' , 'publish_time' , 'socials_text' , 'author_email' , 'retraction_message' ]
44+ if _is_editor ( request ):
45+ return editor_fields
3446 return super ().get_fields (request , obj )
3547
3648 def get_readonly_fields (self , request , obj = None ):
37- if not request .user .is_superuser and request .user .groups .filter (name = 'Editors' ).exists ():
49+ if _is_editor (request ):
50+ if _is_published (obj ):
51+ return editor_fields
3852 return ['state' , 'publish_time' , 'socials_text' , 'author_email' , 'retraction_message' ]
3953 return super ().get_readonly_fields (request , obj )
4054
0 commit comments