Performance: Self-referencing relationships
MEDIUM IMPACT
This affects database query performance and page load speed when rendering nested or recursive data structures.
class Category(models.Model): name = models.CharField(max_length=100) parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE) # In view: categories = Category.objects.select_related('parent').all() for cat in categories: if cat.parent: print(cat.parent.name) # no extra queries
class Category(models.Model): name = models.CharField(max_length=100) parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE) # In view: categories = Category.objects.all() for cat in categories: if cat.parent: print(cat.parent.name) # triggers a query per item
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| N+1 queries on self-referencing FK | Low | Low | Low | [X] Bad |
| select_related on self-referencing FK | Low | Low | Low | [OK] Good |