OneToOne Relationship Example

A snippet showing how to use OneToOneField in Django models.


# models.py

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=100)

    def __str__(self):
        return self.username

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
    bio = models.TextField(blank=True)
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)

    def __str__(self):
        return f"Profile of {self.user.username}"
  

# Django Shell

>>> from accounts.models import User, Profile
>>> user = User.objects.create(username='john_doe')
>>> profile = Profile.objects.create(user=user, bio='Django Developer')
>>> profile.user.username
'john_doe'
>>> user.profile.bio
'Django Developer'
  
Explanation:
  • OneToOneField creates a one-to-one link between two models (each user has one profile).
  • on_delete=models.CASCADE ensures that if the user is deleted, the profile is also removed.
  • The related_name makes it easy to access the profile from the user model (user.profile).
  • Commonly used for extending user models with extra information like bio, avatar, or social links.
  • Category Models & ORM
  • Total Views 935
  • Last Modified 30 September, 2025
  • Tags #models #relationships #onetoone #orm
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.