Django , save_model , admin
okay the issue i am facing is that i am being able to add and save a user , no problem in that and once created , than i can easily assign therapist to that user again no problem , the problem arises when i try to assign the user with a therapist while creating the user , i am realy not getting that where am i making the mistake i mean , i have this feeling that i am assigning things to the user before even creating it but i cant find out which block of code is doing so or maybe just maybe the save_model is working in such a manner that that block code or block of codes need to be rearranged , kindly guide me
def save_model(self, request, obj, form, change):
# If this is an existing instance and ending is set, prevent changing treatment_therapist
if change and obj.client_current_status in UserJourneyStatus.ending_status() and 'treatment_therapist' in form.changed_data:
return # Don't save the change to treatment_therapist
if 'treatment_therapist' in form.changed_data:
# If this is the first time assigning a therapist
if not obj.therapist_assigned_at and obj.treatment_therapist:
obj.therapist_assigned_at = now()
# If changing to a new therapist, update the assignment date
elif obj.treatment_therapist:
obj.therapist_assigned_at = now()
reason_for_change = form.cleaned_data.get('reason_for_change', 'Updated via admin')
TherapistHistory.objects.create(
user=obj,
therapist_name=obj.treatment_therapist.get_full_name() if obj.treatment_therapist else 'Unassigned',
transfer_date=obj.updated,
reason_for_change=reason_for_change,
)
if change:
original = User.objects.get(pk=obj.pk)
if original.client_current_status != obj.client_current_status:
obj.status_changed_at = now()
# Auto-set ending_datetime if status is in ending_status
if obj.client_current_status in UserJourneyStatus.ending_status():
obj.ending_datetime = now()
if not obj.archived_at:
obj.archived_at = now()
# if status is archived, preserves previous ending info and just mark archived_at
if original.client_current_status in UserJourneyStatus.ending_status() and \
original.client_current_status != UserJourneyStatus.ARCHIVED:
obj.client_status_note = f"Archived after ending:{original.client_current_status}"
else:
obj.ending_datetime = None
UserStatusHistory.objects.create(
user=obj,
journey_status=obj.client_current_status,
journey_notes=obj.client_status_note or "No notes were added for this status change",
changed_by=request.user,
)
super().save_model(request, obj, form, change)
The therapist should be assigned and object should be saved after.
obj.therapist_assigned =form.xyz
...
...
obj.save()