How to create instance of model during user registration process? Django

Viewed 268

I am writing a simple event app in django. I have register and login process.

I have two models. Model creator has one OneToOneField with attribute User.

Event model has attribute creator as ForeignKey which contain specific User.

What is my problem? When I create new user, I want to create new instance of Creator model at the same time and when I log in as that user and create new event, I want to set value of creator in Event as this user.

How can I do it? models.py and views.py below:

models.py

class Event(models.Model):
    SPORT = (
        ('Football', 'Football'),
        ('Volleyball', 'Volleyball'),
        ('Basketball', 'Basketball'),
        ('Futsal', 'Futsal'),
        ('Tennis', 'Tennis'),
        ('Handball', 'Handball'),
        ('Ice Hockey', 'Ice Hockey'),
        ('Paintball', 'Paintball')
    )
    creator = models.ForeignKey(Creator, null=True,     on_delete=models.SET_NULL)
    sport = models.CharField(max_length=20, null=True, choices=SPORT)
    event_name = models.CharField(max_length=30)
    event_date = models.DateTimeField(default=date.today())
    end_event_date = models.DateTimeField(default=date.today())
    current_members = models.IntegerField(default=1)
    total_members = models.IntegerField(default=0)
    event_location = models.CharField(max_length=50)
    cost = models.FloatField(default=0, max_length=5)
    description = models.CharField(max_length=300, blank=True)

    def __str__(self):
        return self.event_name

class Creator(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)

views.py

@unauthenticated_user
def registerPage(request):
    form = CreateUserForm()

    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'Account created successfully!')
            return redirect('login')

    context = {'form': form}
    return render(request, 'events/register.html', context)
1 Answers

To create a new Creator at signup:

views.py

...
from django.contrib.auth import User

from .models import Creator
...
    ...
        if form.is_valid():
            new_user = form.save()
            Creator.objects.create(user=new_user)
            messages.success(request, 'Account created successfully!')

To add the creator to Event, you would get() the currently logged in user (request.user) from the Creator model, then pass that to the creator field when creating a new Event

Related