Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

what on_delete option to use in django app?

I have an Article model that allows admins to publish articles. Each article is assigned to a user that is creating this article.

I want to make sure that all articles will stay untouched even if I delete the author of this particular article. I chose on_delete=models.DO_NOTHING to be sure that nothing except user account will be removed but I am not quite sure that is the most effective way.

class Article(models.Model):
    id = models.AutoField(primary_key=True)
    author = models.ForeignKey(User, blank=True, null=True, on_delete=models.DO_NOTHING)
    title = models.CharField('Title', max_length=70, help_text='max 70 characters')
    body = models.TextField('Description')

Question

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Should I use another option to use or DO_NOTHING is good enough. Obviously the most important to me is that author’s name will be visible in the article after deletion and the article itself cannot be removed.

>Solution :

Best I can say is:

add another field called author_name.

now set the on_delete of your author to models.SET_NULL.

Add a custom save method to add the name of your user to author_name.

Add a property to your model named author_full_name
in this property check if author is not null return user name and last name.
if author is None return author_name.

This way when the article is saved user full name is saved on author_name. and if user is deleted you can use the author_name.
but watch out for the custom save method it might add some issues if you don’t check the user and it’s deletion.


Edit: Another solution

If you have a custom user model you can a field to your users called is_deleted.

After your users delete their accounts just set this field to True and have the logic in your app to excludes deleted accounts.

this way your users won’t be accessible to anyone but you can use them for the articles and foreign keys. (remember to tell your users that account deletion works this way or set a task to remove accounts after a while and set the field that I said above.)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading