Relationship

  • 1. One to One Relationship

    
                         from django.db import models
    
                        #DataFlair #DjangoTutorials
                        # Create your models here.
                        class Customer(models.Model):
                            name = models.CharField(max_length=255)
    
                        class Vehicle(models.Model):
                            name = models.CharField(max_length=255)
                            customer = models.OneToOneField(
                                Customer,
                                on_delete=models.CASCADE,
                                related_name='vehicle'
                            )
    
                        
    Model
    
    
                        class Owner(models.Model):
    
                            #...
                            name = models.CharField(max_length=255)
                        class Car(models.Model):
    
                            #...
                            name = models.CharField(max_length=255)
                            owner = models.OneToOneField(
                                Owner,
                                on_delete=models.CASCADE,
                                related_name='car'
                            )
    
                        
    Store Records:
    
    
                        car = Car.objects.get(id=1)
                        owner  = Owner.objects.get(id=1)
                        # Create relation between Owner and Car.
                        owner.car = car
                        owner.car.save()
                        # Create relation between Car and Owner.
                        car.owner = owner
                        car.save()
    
                        
    Retrieve Records:
    
                        # Get Owner Car
                        owner.car
                        # Get Car Owner
                        car.owner;
    
                        
  • 2. One to Many Relationships

    
                         from django.db import models
    
                        #DataFlair #DjangoTutorials
                        # Create your models here.
                        class Customer(models.Model):
                            name = models.CharField(max_length=255)
    
                        class Vehicle(models.Model):
                            name = models.CharField(max_length=255)
                            customer = models.ForeignKey(
                                Customer,
                                on_delete=models.CASCADE,
                                related_name='Vehicle'
                            )
    
                            
    Models:
    
    
                            class Thief(models.Model):
    
                                # ...
                                name = models.CharField(max_length=255)
                            class Car(models.Model):
    
                                # ...
                                name = models.CharField(max_length=255)
                                thief = models.ForeignKey(
                                    Thief,
                                    on_delete=models.CASCADE,
                                    related_name='cars'
                                )
    
                                
    Store Records:
    
                                thief  = Thief.objects.get(id=1)
                                car1 = Car.objects.get(id=1)
                                ...
                                # Create relation between Thief and Car.
                                thief.cars.add(car1,car2, car3)
                                # Create relation between Car and Thief.
                                car.thief = thief
                                car.save()
                                # When we creating new car : 
                                car = Car(name = 'test name', thief=thief)
                                car.save()
    
                                
    Retrieve Records:
    
                                # Get Thief Car  
                                  thief.cars.all()
                                  # Get Car Thief
                                  car.thief
                                  
  • 3. Many to Many Relationships

    
                         from django.db import models
    
                          # Create your models here.
                          #DataFlair #Many to Many Relationship
                          class Worker(models.Model):
                              name = models.CharField(max_length=255)
    
                          class Machine(models.Model):
                              name = models.CharField(max_length=255)
                              worker = models.ManyToManyField(
                                  Worker,
                                  related_name='Machine'
                              )
    
                              
    Models:
    
    
                              class Driver(models.Model):
    
                                  # ...
                                  name = models.CharField(max_length=255)
                              class Car(models.Model):
    
                                  # ...
                                  name = models.CharField(max_length=255)
                                  drivers = models.ManyToManyField(
                                      Driver,
                                      related_name='cars'
                                  )
    
                                  
    Store Records:
    
    
                                  # Create relation between Driver and Car.
                                  driver  = Driver.objects.get(id=1)
                                  car1 = Car.objects.get(id=1)
                                  car2 = Car.objects.get(id=2)
                                  driver.cars.add(car1,car2)
                                  # Create relation between Car and Driver.
                                  car = Car.objects.get(id=1)
                                  driver1  = Driver.objects.get(id=2)
                                  driver2  = Driver.objects.get(id=3)
    
                                  car.drivers.add(driver1, driver2)
    
                                  
    Retrieve Records:
    
                                  # Get Driver Car
                                  driver.cars.all()
                                  # Get Car Drivers
                                  car.drivers.all()
    
                                  
  • 4. Polymorphic One to Many Relationship

    we have 3 models (Man, Woman and Car), and 3 tables (men, women and cars).

    The Car table should store the Buyer ID and the Buyer table should store the relation between ID and Type.

    Models
    
    
                         from django.contrib.contenttypes.fields import GenericForeignKey
                        from django.contrib.contenttypes.fields import GenericRelation
                        from django.contrib.contenttypes.models import ContentType
                        class Car(models.Model):
                            # ...
                            name = models.CharField(max_length=255)
                            content_type = models.ForeignKey(ContentType,         on_delete=models.CASCADE)
                            object_id = models.PositiveIntegerField()
                            content_object = GenericForeignKey()
                        class Woman(models.Model):
                            # ...
                            name = models.CharField(max_length=255)
                            cars = GenericRelation(Car)
                        class Man(models.Model):
                            # ...
                            name = models.CharField(max_length=255)
                            cars = GenericRelation(Car)
    
                                  
    Store Records:
    
    
                                     man = Man.objects.get(id=1)
                                    woman = Woman.objects.get(id=1)
                                    # Create relation between buyer (Man/Woman) and Car.
                                    car = Car.objects.get(id=1)
                                    woman.cars.add(car)
                                    # Create relation between Car and buyer (Men/Women).
                                    man = Man.objects.get(id=1)
                                    woman = Woman.objects.get(id=1)
                                    c = Car(name = 'test name',content_object=man)
                                    c.save()
                                    c = Car(name = 'test name',content_object=woman)
                                    c.save()
    
                                  
    Retrieve Records:
    
    
                                    # Get buyer (Man/Woman) Cars
                                    man.cars.all()
                                    woman.cars.all()
                                    # Get Car buyer (Man and Woman)
                                    car.content_object