@ -151,12 +151,15 @@ class EventAdmin(SyncedObjectAdmin):
""" Action to set club for selected events """
""" Action to set club for selected events """
from django import forms
from django import forms
from django . contrib . admin . widgets import ForeignKeyRawIdWidget
from django . contrib . admin . widgets import ForeignKeyRawIdWidget
from django . contrib . admin import helpers
from django . core . exceptions import ValidationError
class ClubSelectionForm ( forms . Form ) :
class ClubSelectionForm ( forms . Form ) :
club = forms . ModelChoiceField (
_selected_action = forms . CharField ( widget = forms . MultipleHiddenInput )
queryset = Club . objects . all ( ) ,
action = forms . CharField ( widget = forms . HiddenInput )
required = True ,
club_id = forms . CharField (
label = ' Club ' ,
label = ' Club ' ,
required = True ,
help_text = ' Enter Club ID or use the search icon to find a club ' ,
help_text = ' Enter Club ID or use the search icon to find a club ' ,
widget = ForeignKeyRawIdWidget (
widget = ForeignKeyRawIdWidget (
Event . _meta . get_field ( ' club ' ) . remote_field ,
Event . _meta . get_field ( ' club ' ) . remote_field ,
@ -164,10 +167,20 @@ class EventAdmin(SyncedObjectAdmin):
)
)
)
)
def clean_club_id ( self ) :
club_id = self . cleaned_data [ ' club_id ' ]
try :
club = Club . objects . get ( pk = club_id )
return club
except Club . DoesNotExist :
raise ValidationError ( f ' Club with ID { club_id } does not exist. ' )
except ( ValueError , TypeError ) as e :
raise ValidationError ( f ' Invalid Club ID format: { club_id } ' )
if ' apply ' in request . POST :
if ' apply ' in request . POST :
form = ClubSelectionForm ( request . POST )
form = ClubSelectionForm ( request . POST )
if form . is_valid ( ) :
if form . is_valid ( ) :
club = form . cleaned_data [ ' club ' ]
club = form . cleaned_data [ ' club_id ' ] # This is now a Club instance
updated_count = queryset . update ( club = club )
updated_count = queryset . update ( club = club )
self . message_user (
self . message_user (
request ,
request ,
@ -175,14 +188,28 @@ class EventAdmin(SyncedObjectAdmin):
messages . SUCCESS
messages . SUCCESS
)
)
return None
return None
else :
else :
form = ClubSelectionForm ( )
# Show form errors
self . message_user (
request ,
f ' Form validation failed. Errors: { form . errors } ' ,
messages . ERROR
)
# Initial form display
form = ClubSelectionForm ( initial = {
' _selected_action ' : request . POST . getlist ( helpers . ACTION_CHECKBOX_NAME ) ,
' action ' : ' set_club_action ' ,
} )
context = {
context = {
' form ' : form ,
' form ' : form ,
' events ' : queryset ,
' events ' : queryset ,
' action_checkbox_name ' : helpers . ACTION_CHECKBOX_NAME ,
' action_name ' : ' set_club_action ' ,
' action_name ' : ' set_club_action ' ,
' title ' : ' Set Club for Events ' ,
' title ' : ' Set Club for Events ' ,
' media ' : form . media ,
' has_change_permission ' : True ,
}
}
return render ( request , ' admin/tournaments/set_club_action.html ' , context )
return render ( request , ' admin/tournaments/set_club_action.html ' , context )