Home > Blockchain >  How to register user using your own Model Django
How to register user using your own Model Django

Time:11-08

I am having trouble registering a user as a PetOwner. I'm not sure what I am suppose to code in my signup view. I can signup a user and that user does not have admin or staff status which is great because they should not have these privileges. Problem is that I do not just want them to be a user but I want them to be a PetOwner. Currently, they are only a User not a PetOwner. What am I doing wrong here or what do I have to add.

in models.py

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User


class PetOwner(models.Model):
    """Model representing a pet owner."""

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=50, help_text="Enter owner's first name")
    last_name = models.CharField(max_length=50, help_text="Enter owner's last name")
    email = models.EmailField(
        max_length=50, blank=True, unique=True, help_text="Enter owner's email"
    )
    phone_number = models.CharField(
        max_length=15, blank=True, unique=True, help_text="Enter owner's phone number"
    )
    address = models.ForeignKey(
        "Address", on_delete=models.SET_NULL, null=True, blank=True
    )

    class Meta:
        """Controls default ordering of records when querying the Model type."""

        ordering = ["first_name", "last_name"]

    def __str__(self):
        """String for representing the Model object."""
        return self.first_name

    def get_absolute_url(self):
        """Returns the url to access a detail record of this pet owner."""
        return reverse("petowner_detail", args=[str(self.id)])

in views.py

from django.shortcuts import render, redirect
from django.views import generic
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import PetOwner, Pet, Breed, Address


def signup(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get("username")
            password = form.cleaned_data.get("password1")
            user = authenticate(username=username, password=password)
            login(request, user)
            return redirect("/")
        else:
            return render(request, "signup.html", {"form": form})
    else:
        form = UserCreationForm()
        return render(request, "signup.html", {"form": form})

in urls.py

path("signup/", views.signup, name="signup"),

in signup.html

{% extends 'base.html' %}

<h1>Sign Up Page</h1>

{% block content %}
<form method="post">
  {% csrf_token %} {{ form.as_p }}
  <button type="submit">Register</button>
</form>
{% endblock content %}

CodePudding user response:

You need save the related PetOwner after the user.

if form.is_valid():
    user = form.save()
    # Create the related data here...
    petOwner = PetOwner(
        user=user,
        first_name=user.first_name,
        last_name=user.last_name
    )
    petOwner.save()
    login(request, user)
    return redirect("/")

CodePudding user response:

you should use Foreign key instate of one to one field to pet owner and give them roll as pet owner example is below

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User

roll={petowner, roll1, roll2}

user = models.OneToOneField(User, on_delete=models.CASCADE, add roll here)

in views.py just check roll and create pet owner object in pet owner model

also you can do this without roll just write logic for if user created then when user will be added it should create a pet owner object automatically

for example

if user:
     classrooms = Classroom.objects.filter(id=id, is_active=True)
if users.exists():
   user = users.first()
   is_user = (user.user==request.user)
   if not pet_owner:
      pet_owner.objects.create(user=user, user=request.user).save()

this is just an example names and model can be changed

  • Related