Skip to content

Instantly share code, notes, and snippets.

@ahmetkotan
Last active November 7, 2023 11:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ahmetkotan/116a6a2712bd07350b9a09cbfc1805f8 to your computer and use it in GitHub Desktop.
Save ahmetkotan/116a6a2712bd07350b9a09cbfc1805f8 to your computer and use it in GitHub Desktop.
Find new string for unique fields in django soft delete operation
# Standard Library
from typing import Dict
# Django Stuff
from django.apps import apps
def find_deleted_string(model_name: str, **kwargs) -> Dict[str, str]:
parameters = {key: f"{value}<d>" if isinstance(value, str) else value for key, value in kwargs.items()}
model_class = apps.get_model(model_name)
if model_class.objects.filter(is_deleted__exact=True, **parameters).exists():
return find_deleted_string(model_name=model_name, **parameters)
return parameters
# Example usage: users/models.py
# class User(SoftDeleteModal):
# username = models.CharField(unique=True, ...)
# is_deleted = models.BooleanField(default=False)
# ...
# def delete(*args, **kwargs):
# self.username = find_delete_string(model_name="users.User", username=self.username)["username"]
# return super().delete(*args, **kwargs)
# Complex usage:
# new_fields = find_delete_string(model_name="users.User", username=self.username, email=self.email)
# new_username, new_email = new_fields["username"], new_fields["email"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment