Search code examples
djangodatabasemodel

how we can connect two table in django model


**I am new to django

i am working on a project where I have 4 usertype

1- super admin 2- sub admin 3 - clinic 4 - patient

Now I want to make the login for all the 4 usertype**

right now I have create a model like this

import django
from django.db import models
from django.contrib.auth.models import AbstractUser

class Registered_user(AbstractUser):

   is_clinic = models.BooleanField(default=False)
   is_patient = models.BooleanField(default=False)
   token =  models.CharField(max_length=120, default=None, null= True)
   forgot_token = models.CharField(default=None, max_length=120, null=True),
   email =  models.EmailField(unique = True, max_length=254, verbose_name='email address')
   updated = models.DateTimeField(auto_now=True)
   published = models.DateTimeField(default=django.utils.timezone.now)
#clinic
   clnc_name = models.CharField(max_length=255)
   clnc_phone = models.BigIntegerField(null= True)
   clnc_contact_name = models.CharField(max_length=255)
   clnc_Job_Title = models.CharField(max_length=255)
   clnc_address_line1 = models.CharField(max_length=255)
   clnc_address_line2 = models.CharField(max_length=255)
   clnc_county = models.CharField(max_length=255)
   clnc_postcode = models.CharField(max_length=255)
   clnc_town_city = models.CharField(max_length=255)
   clnc_created_at = models.DateTimeField(auto_now_add=True)
   clnc_status = models.BooleanField(default=False)

#Patient
   punique_number = models.CharField(max_length=20)
   pname= models.CharField(max_length=255)
   patient_adddress = models.TextField(max_length=500)
   pphone_number = models.IntegerField(null=True)
   phome_number = models.IntegerField(null=True)
   pwork_number = models.IntegerField(null=True)
   pdob = models.CharField(max_length=255,null=True)
   relative_name = models.CharField(max_length=255,null=True)
   relative_phone = models.CharField(max_length=255,null=True)
   relation = models.CharField(max_length=255,null=True)
   pgender = models.CharField(max_length=20)
   pcreated_at = models.DateTimeField(auto_now_add=True)
   ptnt_status = models.BooleanField(default=False)

**I want them to be seperated I know this is not the right way to do this

I also tried to use the foreign key but i got null value error

Please let me know how I can create all the three models separate but will get the field of abstract user model **

I try to use the foreign key but i found multiple errors in that


Solution

  • from django.contrib.auth.models import AbstractUser
    from django.db import models
    
    class Registered_user(AbstractUser):
        token = models.CharField(max_length=120, default=None, null=True)
        forgot_token = models.CharField(default=None, max_length=120, null=True)
        updated = models.DateTimeField(auto_now=True)
        published = models.DateTimeField(auto_now_add=True)
    
    class Clinic(models.Model):
        user = models.OneToOneField(Registered_user, on_delete=models.CASCADE, primary_key=True)
        clnc_name = models.CharField(max_length=255)
        clnc_phone = models.BigIntegerField(null=True)
        clnc_contact_name = models.CharField(max_length=255)
        clnc_Job_Title = models.CharField(max_length=255)
        clnc_address_line1 = models.CharField(max_length=255)
        clnc_address_line2 = models.CharField(max_length=255)
        clnc_county = models.CharField(max_length=255)
        clnc_postcode = models.CharField(max_length=255)
        clnc_town_city = models.CharField(max_length=255)
        clnc_created_at = models.DateTimeField(auto_now_add=True)
        clnc_status = models.BooleanField(default=False)
    
    class Patient(models.Model):
        user = models.OneToOneField(Registered_user, on_delete=models.CASCADE, primary_key=True)
        punique_number = models.CharField(max_length=20)
        pname= models.CharField(max_length=255)
        patient_adddress = models.TextField(max_length=500)
        pphone_number = models.IntegerField(null=True)
        phome_number = models.IntegerField(null=True)
        pwork_number = models.IntegerField(null=True)
        pdob = models.CharField(max_length=255,null=True)
        relative_name = models.CharField(max_length=255,null=True)
        relative_phone = models.CharField(max_length=255,null=True)
        relation = models.CharField(max_length=255,null=True)
        pgender = models.CharField(max_length=20)
        pcreated_at = models.DateTimeField(auto_now_add=True)
        ptnt_status = models.BooleanField(default=False)