I\'m building my first django app. I have a user, and the user has a list of favourites. A user has exactly one list of favourites, and that list belongs exclusively to that
The most common way to accomplish this is to use the Django signals system. You can attach a signal handler (just a function somewhere) to the post_save signal for the User model, and create your favorites list inside of that callback.
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(post_save, sender=User)
def create_favorites(sender, instance, created, **kwargs):
if created:
Favorites.objects.create(user=instance)
The above was adapted from the Django signals docs. Be sure to read the signals docs entirely because there are a few issues that can snag you such as where your signal handler code should live and how to avoid duplicate handlers.
One way would be to register a post_save signal with next handler:
def user_save(sender, instance, created, **kwargs):
if created:
FavouriteList.objects.get_or_create(user=instance)
An excellent django-annoying plugin solves this for you with AutoOneToOneField
. I'm using it for user profiles in all django projects I work on.