0

Everytime a new user is registered I want to create two mail folders: Draft and Deleted, and also allow the user to create his own folders.

How can I override the user registration so the two folders are created for each new user?

Antoher alternative would be to give a default folder value and allow users to add their own new folders.

Models.py

class UserFolder(models.Model):
user          = models.ForeignKey(settings.AUTH_USER_MODEL, null = True, blank = True)


class MessageFolder(models.Model):
folder        = models.ForeignKey(UserFolder, null = True, blank = True)
message       = models.ForeignKey(Message, null = True, blank = True)
Gustavo Reyes
  • 1,313
  • 1
  • 17
  • 31

3 Answers3

1

You can use django signals to automatically create those by listening in on the signal for the user model.

Below is an example that run a few functions to recalculate stuff when an item is saved/deleted from an order.

from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver

@receiver((post_save, post_delete), sender='main.OrderItem')
def update_order_when_items_changed(sender, instance, **kwargs):
    order = instance.order
    order.set_weight()
    order.set_total_price()
    order.save()

So yours might look something like this (not tested):

@receiver((post_save,), sender='User')
def create_user_folders(sender, instance, created, **kwargs):
   if not created: return
   # generate MessageFolder && UserFolder
Jared Mackey
  • 3,998
  • 4
  • 31
  • 50
0

One issue I have realized over the years with signals is they are neat to implement however they are synchronous.

Personally I would use subprocess or would suggest using thread to overcome the limitation of making it feel like asynchronous. Or best you can have a cron job which queries the database and creates the folders.

Community
  • 1
  • 1
Pranav Garg
  • 583
  • 1
  • 9
  • 17
0

Thanks @electrometro for pointing me in the right direction. This is my final working result:

class UserFolder(models.Model):
user          = models.ForeignKey(settings.AUTH_USER_MODEL, null = True, blank = True)
name          = models.CharField(max_length = 100)

@receiver((post_save), sender=User)
def create_user_folders(sender, instance, created, **kwargs):
    if not created: 
        return
    else:
        # generate MessageFolder && UserFolder
        draft_folder = UserFolder(None,instance.pk,"Draft")
        draft_folder.save()

        deleted_folder = UserFolder(None,instance.pk,"Deleted")
        deleted_folder.save()
        return
Gustavo Reyes
  • 1,313
  • 1
  • 17
  • 31