Performance: OneToOneField for one-to-one
This affects database query speed and page load time when accessing related objects in Django.
Jump into concepts and practice - no test required
profile = Profile.objects.select_related('user').get(id=1) username = profile.user.username # no extra query, data fetched in one query
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) # Accessing profile data profile = Profile.objects.get(id=1) username = profile.user.username # causes an extra query if not optimized
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Access related object without select_related | N/A | N/A | Increases server response time | [X] Bad |
| Access related object with select_related | N/A | N/A | Faster server response, quicker page load | [OK] Good |
OneToOneField?OneToOneField in a Django model?on_delete argument to specify behavior on deletion.on_delete=models.CASCADE. user = models.OneToOneField(User) misses on_delete, which is mandatory.class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField()
user = User.objects.create(username='anna')
profile = Profile.objects.create(user=user, bio='Hello!')
print(profile.user.username)profile.user.username fetches the username of the linked User, which is 'anna'.class Employee(models.Model):
user = models.OneToOneField(User)
department = models.CharField(max_length=100)on_delete argument to specify what happens if the linked User is deleted.on_delete, which will cause an error when running migrations or server start.OneToOneField?