Arbazz Hussain
Arbazz Hussain

Reputation: 1932

Effecient way to add default user to model object which is created by other users

My User has 2 objects.

1. admin - super admin
2. tom - user

MyModel with

class MyModel:
    project_user = models.ManyToManyField(User)

Let's suppose tom is creating a MyModel object:

MyModel(project_user=request.user).save()

Here I would like to add admin user automatically to the project_user object when someone creates an object. What will the more efficient way to implement it,How about using signals or def save(self)?

Upvotes: 0

Views: 31

Answers (1)

Aris Chow
Aris Chow

Reputation: 306

I would recommend using Signals.

from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

In the snippet above, I'm trying to create a custom model (i.e. Profile) when a default user once created. Therefore, I think you could write like this:

from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=MyModel)
def create_user(sender, instance, created, **kwargs):
    if created:
        User.objects.create_user(username=instance.username)

And create_user() is a helper function of Django.

Edit: Added what I import in the snippet.

Upvotes: 1

Related Questions