Interview question
What is the difference between ForeignKey, OneToOneField, and ManyToManyField in Django models? Django models में ForeignKey, OneToOneField, और ManyToManyField में क्या अंतर है?
Answer
| Field type | Relationship | Example |
|---|---|---|
| ForeignKey | Many-to-one | Many Books, one Author |
| OneToOneField | One-to-one | One User, one Profile |
| ManyToManyField | Many-to-many | Many Students, many Courses |
from django.db import models
from django.contrib.auth.models import User
# ForeignKey - many books can belong to one author
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')
author = Author.objects.get(id=1)
author.books.all() # access related books via related_name
# OneToOneField - each User has exactly one Profile
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(blank=True)
user = User.objects.get(id=1)
profile = user.profile # direct one-to-one access
# ManyToManyField - students can enroll in many courses, courses can
# have many students; Django creates a hidden junction table automatically
class Course(models.Model):
name = models.CharField(max_length=100)
class Student(models.Model):
name = models.CharField(max_length=100)
courses = models.ManyToManyField(Course, related_name='students')
student = Student.objects.get(id=1)
student.courses.add(course1, course2) # adding relationships
student.courses.all() # all courses this student is enrolled in
course = Course.objects.get(id=1)
course.students.all() # all students enrolled in this course| Field type | Relationship | उदाहरण |
|---|---|---|
| ForeignKey | Many-to-one | कई Books, एक Author |
| OneToOneField | One-to-one | एक User, एक Profile |
| ManyToManyField | Many-to-many | कई Students, कई Courses |
from django.db import models
from django.contrib.auth.models import User
# ForeignKey
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')
author = Author.objects.get(id=1)
author.books.all()
# OneToOneField
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(blank=True)
user = User.objects.get(id=1)
profile = user.profile
# ManyToManyField
class Course(models.Model):
name = models.CharField(max_length=100)
class Student(models.Model):
name = models.CharField(max_length=100)
courses = models.ManyToManyField(Course, related_name='students')
student = Student.objects.get(id=1)
student.courses.add(course1, course2)
student.courses.all()Was this answer clear?