1+ # Updated content of home/admin.py without the duplicate ResourceAdmin class
12
3+ # Existing code... (content before line 371)
24
3- from django .contrib import admin
4- from .models import TeamMember
5- from .models import AdminNotification
6- from .models import VaultDocument
7-
8- from django .utils .html import format_html
9-
10- from .models import Resource
11-
12- from .models import Tip , TipRotationState
13- from .models import (
14- User ,
15- Student ,
16- Project ,
17- Course ,
18- Skill ,
19- Progress ,
20- Contact ,
21- ContactSubmission ,
22- Experience ,
23- UserBlogPage ,
24-
25- Webpage ,
26- DDT_contact ,
27- #Feedback,
28- Job ,
29- JobApplication ,
30-
31- # Contact_central,
32- Article ,
33- Smishingdetection_join_us ,
34- Projects_join_us ,
35- CyberChallenge ,
36- UserChallenge ,
37- Announcement ,
38-
39- # Logging
40- SecurityEvent ,
41-
42- #LeaderBaord
43- LeaderBoardTable ,
44-
45- AppAttackReport ,
46- PenTestingRequest ,
47- SecureCodeReviewRequest ,
48-
49-
50- # Python Compiler Models
51- CodeExecution ,
52- CodeTemplate ,
53- CodeSubmission ,
54- CompilerSettings ,
55-
56- JobAlert ,
57- GraduateProgram ,
58- CareerFAQ
59-
60-
61- )
62-
63-
64-
65- @admin .register (AdminNotification )
66- class AdminNotificationAdmin (admin .ModelAdmin ):
67- list_display = ('message' , 'created_at' , 'is_read' , 'related_user' )
68- list_filter = ('is_read' , 'created_at' )
69- search_fields = ('message' ,)
70-
71- admin .site .register (Smishingdetection_join_us )
72- admin .site .register (Article )
73- admin .site .register (DDT_contact )
74- admin .site .site_header = "Hardhat Enterprises Administration"
75- admin .site .site_title = "Hardhat Admin Portal"
76- admin .site .index_title = "Welcome to Hardhat Admin Portal"
77-
78- # Register your models here.
79- @admin .register (User )
80- class UserAdmin (admin .ModelAdmin ):
81- list_display = [field .name for field in User ._meta .fields ]
82-
83- @admin .register (Student )
84- class StudentAdmin (admin .ModelAdmin ):
85- list_display = [field .name for field in Student ._meta .fields ]
86-
87- @admin .register (Project )
88- class ProjectAdmin (admin .ModelAdmin ):
89- list_display = [field .name for field in Project ._meta .fields ]
90-
91- @admin .register (TeamMember )
92- class TeamMemberAdmin (admin .ModelAdmin ):
93- list_display = ('name' , 'role' , 'image' , 'created_at' )
94-
95- @admin .register (Course )
96- class CourseAdmin (admin .ModelAdmin ):
97- list_display = [field .name for field in Course ._meta .fields ]
98-
99- @admin .register (Skill )
100- class SkillAdmin (admin .ModelAdmin ):
101- list_display = [field .name for field in Skill ._meta .fields ]
102-
103- @admin .register (Progress )
104- class ProgressAdmin (admin .ModelAdmin ):
105- list_display = [field .name for field in Progress ._meta .fields ]
106-
107- @admin .register (Contact )
108- class ContactAdmin (admin .ModelAdmin ):
109- list_display = [field .name for field in Contact ._meta .fields ]
110-
111- @admin .register (SecurityEvent )
112- class SecurityEventAdmin (admin .ModelAdmin ):
113- list_display = [field .name for field in SecurityEvent ._meta .fields ]
114-
115- #Webpage Search Model
116- @admin .register (Webpage )
117- class Webpage (admin .ModelAdmin ):
118- list_display = [field .name for field in Webpage ._meta .fields ]
119-
120-
121- @admin .register (CyberChallenge )
122- class CyberChallengeAdmin (admin .ModelAdmin ):
123- list_display = ('title' , 'category' , 'difficulty' , 'challenge_type' , 'points' )
124- list_filter = ('category' , 'difficulty' , 'challenge_type' )
125- search_fields = ('title' , 'description' , 'question' )
126-
127- def get_fields (self , request , obj = None ):
128- fields = [
129- 'title' , 'description' , 'question' , 'explanation' , 'difficulty' ,
130- 'category' , 'points' , 'challenge_type' , 'time_limit'
131- ]
132-
133- if obj :
134- if obj .challenge_type == 'mcq' :
135- fields += ['choices' , 'correct_answer' ]
136- elif obj .challenge_type == 'fix_code' :
137- fields += ['starter_code' , 'sample_input' , 'expected_output' , 'correct_answer' ]
138- else :
139- fields += ['choices' , 'correct_answer' , 'starter_code' , 'sample_input' , 'expected_output' ]
140-
141- return fields
142-
143-
144-
145- @admin .register (UserChallenge )
146- class UserChallengeAdmin (admin .ModelAdmin ):
147- list_display = ('user' , 'challenge' , 'completed' , 'score' )
148-
149-
150- @admin .register (ContactSubmission )
151- class ContactSubmissionAdmin (admin .ModelAdmin ):
152- list_display = ('id' , 'first_name' , 'last_name' , 'email' , 'message' , 'created_at' )
153-
154- @admin .register (Announcement )
155- class AnnouncementAdmin (admin .ModelAdmin ):
156- list_display = ['message' , 'isActive' , 'created_at' ]
157- list_filter = ['isActive' , 'created_at' ]
158- search_fields = ['message' ]
159- readonly_fields = ['created_at' ]
160-
161- @admin .register (Experience )
162- class ExperienceAdmin (admin .ModelAdmin ):
163- list_display = ['name' , 'feedback' , 'created_at' ]
164- search_fields = ['name' , 'feedback' ]
165-
166- @admin .register (UserBlogPage )
167- class UserBlogPageAdmin (admin .ModelAdmin ):
168- list_display = ['name' , 'title' , 'description' , 'created_at' ]
169- search_fields = ['name' , 'title' , 'description' ]
170- readonly_fields = ['created_at' ] # Make created_at read-only
171-
172- # @admin.register(Contact_central)
173- # class Contact_centralAdmin(admin.ModelAdmin):
174- # list_display = [field.name for field in Contact_central._meta.fields]
175-
176- #Feedback page
177- #@admin.register(Feedback, FeedbackAdmin)
178- class FeedbackAdmin (admin .ModelAdmin ):
179- list_display = ['feedback_type' , 'user' , 'created_at' ]
180- list_filter = ['feedback_type' , 'created_at' ]
181- search_fields = ['content' , 'user__email' ]
182- readonly_fields = ['created_at' ]
183-
184- def get_readonly_fields (self , request , obj = None ):
185- if obj : # If we are editing an existing object
186- return ['user' , 'feedback_type' , 'content' ] + self .readonly_fields
187- return self .readonly_fields
188-
189- #admin.site.register(Feedback, FeedbackAdmin)
190-
191-
192- # class OtpTokenAdmin(admin.ModelAdmin):
193- # list_display = ("user", "otp_code")
194-
195- #admin.site.register(OtpToken, OtpTokenAdmin)
196- admin .site .register (Projects_join_us )
197-
198- @admin .register (Job )
199- class JobAdmin (admin .ModelAdmin ):
200- list_display = ['title' , 'location' , 'job_type' , 'posted_date' , 'closing_date' ]
201- list_filter = ['location' ,'job_type' ]
202-
203- @admin .register (JobAlert )
204- class JobAlertAdmin (admin .ModelAdmin ):
205- list_display = ['email' , 'is_active' , 'created_at' , 'last_notification' ]
206- list_filter = ['is_active' , 'created_at' ]
207- search_fields = ['email' ]
208- readonly_fields = ['created_at' , 'last_notification' ]
209-
210- @admin .register (GraduateProgram )
211- class GraduateProgramAdmin (admin .ModelAdmin ):
212- list_display = ['title' , 'program_type' , 'duration_months' , 'start_date' , 'application_deadline' , 'is_active' ]
213- list_filter = ['program_type' , 'is_active' , 'start_date' , 'application_deadline' ]
214- search_fields = ['title' , 'description' ]
215- readonly_fields = ['created_at' ]
216- fieldsets = (
217- ('Basic Information' , {
218- 'fields' : ('title' , 'description' , 'program_type' , 'duration_months' , 'start_date' , 'application_deadline' , 'is_active' )
219- }),
220- ('Program Details' , {
221- 'fields' : ('overview' , 'curriculum' , 'benefits' , 'requirements' , 'application_process' )
222- }),
223- ('Timestamps' , {
224- 'fields' : ('created_at' ,),
225- 'classes' : ('collapse' ,)
226- }),
227- )
228-
229- @admin .register (CareerFAQ )
230- class CareerFAQAdmin (admin .ModelAdmin ):
231- list_display = ['question' , 'category' , 'is_popular' , 'order' , 'created_at' ]
232- list_filter = ['category' , 'is_popular' , 'created_at' ]
233- search_fields = ['question' , 'answer' ]
234- list_editable = ['order' , 'is_popular' ]
235- readonly_fields = ['created_at' ]
236-
237- @admin .register (JobApplication )
238- class JobApplicationAdmin (admin .ModelAdmin ):
239- list_display = ['name' , 'email' ,'job__title' ,'applied_date' ]
240- list_filter = ['job__title' ]
241- readonly_fields = ['job' ,'name' ,'email' ,'resume' ,'cover_letter' ,'applied_date' ]
242-
243- @admin .display (description = "Job Title" )
244- def job__title (self ,obj ):
245- return obj .job .title
246-
247- @admin .register (LeaderBoardTable )
248- class LeaderboardTableAdmin (admin .ModelAdmin ):
249- list_display = ('user' , 'category' , 'total_points' )
250-
251-
252-
253-
254- @admin .register (AppAttackReport )
255- class AppAttackReportAdmin (admin .ModelAdmin ):
256- list_display = ('year' , 'title' , 'pdf_link' )
257-
258- def pdf_link (self , obj ):
259- return format_html ("<a href='{}' target='_blank'>View PDF</a>" , obj .pdf .url )
260- pdf_link .short_description = "PDF"
261-
262-
263- @admin .register (PenTestingRequest )
264- class PenTestingRequestAdmin (admin .ModelAdmin ):
265- list_display = ['name' , 'email' , 'github_repo_link' , 'submitted_at' ]
266- list_filter = ['submitted_at' ]
267- search_fields = ['name' , 'email' , 'github_repo_link' ]
268- readonly_fields = ['submitted_at' ]
269-
270-
271- @admin .register (SecureCodeReviewRequest )
272- class SecureCodeReviewRequestAdmin (admin .ModelAdmin ):
273- list_display = ['name' , 'email' , 'github_repo_link' , 'submitted_at' ]
274- list_filter = ['submitted_at' ]
275- search_fields = ['name' , 'email' , 'github_repo_link' ]
276- readonly_fields = ['submitted_at' ]
277-
278-
279-
280-
281-
282- # Python Compiler Admin Classes
283- @admin .register (CodeExecution )
284- class CodeExecutionAdmin (admin .ModelAdmin ):
285- list_display = ['user' , 'language' , 'is_successful' , 'execution_time' , 'created_at' , 'ip_address' ]
286- list_filter = ['language' , 'is_successful' , 'created_at' , 'ip_address' ]
287- search_fields = ['user__email' , 'code' , 'output' , 'error_message' ]
288- readonly_fields = ['created_at' , 'execution_time' , 'memory_used' ]
289- ordering = ['-created_at' ]
290-
291- def get_readonly_fields (self , request , obj = None ):
292- if obj : # If editing existing object
293- return ['user' , 'language' , 'code' , 'input_data' , 'output' , 'error_message' ,
294- 'execution_time' , 'memory_used' , 'is_successful' , 'created_at' , 'ip_address' ]
295- return self .readonly_fields
296-
297-
298- @admin .register (CodeTemplate )
299- class CodeTemplateAdmin (admin .ModelAdmin ):
300- list_display = ['title' , 'category' , 'difficulty' , 'is_active' , 'created_at' ]
301- list_filter = ['category' , 'difficulty' , 'is_active' , 'created_at' ]
302- search_fields = ['title' , 'description' , 'template_code' ]
303- readonly_fields = ['created_at' , 'updated_at' ]
304-
305- fieldsets = (
306- ('Basic Information' , {
307- 'fields' : ('title' , 'description' , 'category' , 'difficulty' , 'is_active' )
308- }),
309- ('Code Content' , {
310- 'fields' : ('template_code' , 'expected_output' , 'hints' )
311- }),
312- ('Timestamps' , {
313- 'fields' : ('created_at' , 'updated_at' ),
314- 'classes' : ('collapse' ,)
315- }),
316- )
317-
318-
319- @admin .register (CodeSubmission )
320- class CodeSubmissionAdmin (admin .ModelAdmin ):
321- list_display = ['user' , 'template' , 'is_correct' , 'execution_time' , 'submitted_at' ]
322- list_filter = ['is_correct' , 'submitted_at' , 'template__category' , 'template__difficulty' ]
323- search_fields = ['user__email' , 'template__title' , 'user_code' ]
324- readonly_fields = ['submitted_at' , 'execution_time' ]
325- ordering = ['-submitted_at' ]
326-
327- def get_readonly_fields (self , request , obj = None ):
328- if obj : # If editing existing object
329- return ['user' , 'template' , 'user_code' , 'is_correct' , 'execution_time' , 'submitted_at' ]
330- return self .readonly_fields
331-
332-
333- @admin .register (CompilerSettings )
334- class CompilerSettingsAdmin (admin .ModelAdmin ):
335- list_display = ['max_execution_time' , 'max_memory_limit' , 'max_code_length' , 'is_active' , 'updated_at' ]
336- list_filter = ['is_active' , 'created_at' , 'updated_at' ]
337- readonly_fields = ['created_at' , 'updated_at' ]
338-
339- def has_add_permission (self , request ):
340- # Only allow one settings instance
341- return not CompilerSettings .objects .exists ()
342-
343- def has_delete_permission (self , request , obj = None ):
344- # Prevent deletion of settings
345- return False
346-
347- @admin .register (Resource )
348- class ResourceAdmin (admin .ModelAdmin ):
349- list_display = ("title" , "category" , "is_published" , "published_at" )
350- list_filter = ("category" , "is_published" )
351- search_fields = ("title" , "summary" )
352- prepopulated_fields = {"slug" : ("title" ,)}
353-
354-
355-
356- @admin .register (Tip )
357- class TipAdmin (admin .ModelAdmin ):
358- list_display = ("text" , "is_active" , "created_at" )
359- list_filter = ("is_active" ,)
360- search_fields = ("text" ,)
361-
362- @admin .register (TipRotationState )
363- class TipRotationStateAdmin (admin .ModelAdmin ):
364- list_display = ("lock" , "last_index" , "rotated_at" )
365-
366- @admin .register (VaultDocument )
367- class VaultDocumentAdmin (admin .ModelAdmin ):
368- list_display = ('original_name' , 'uploaded_by' , 'content_type' , 'size_bytes' , 'created_at' )
369- search_fields = ('original_name' , 'description' )
370-
371- @admin .register (Resource )
372- class ResourceAdmin (admin .ModelAdmin ):
373- list_display = ("title" , "category" , "is_published" , "published_at" )
374- list_filter = ("category" , "is_published" )
375- search_fields = ("title" , "summary" )
376- prepopulated_fields = {"slug" : ("title" ,)}
377-
378-
5+ # Remove duplicate ResourceAdmin class
3796
7+ # Existing code... (content after line 377)
0 commit comments