Django Framework / Models / Relationship
Relationship
-
1. One to One Relationship
Modelfrom 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' )
Store Records: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' )
Retrieve 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() # Get Owner Car owner.car # Get Car Owner car.owner; -
2. One to Many Relationships
Models: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' )
Store Records: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' )
Retrieve 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() # Get Thief Car thief.cars.all() # Get Car Thief car.thief -
3. Many to Many Relationships
Models: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' )
Store Records: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' )
Retrieve 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) # 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
Store Records: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)
Retrieve 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() # Get buyer (Man/Woman) Cars man.cars.all() woman.cars.all() # Get Car buyer (Man and Woman) car.content_object