Reputation: 1344
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)
Upvotes: 0
Views: 70
Reputation: 1344
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
Upvotes: 0
Reputation: 613
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.
Upvotes: 0
Reputation: 4158
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
Upvotes: 1