""" Tests for defer() and only(). """ from django.db import models class Secondary(models.Model): first = models.CharField(max_length=50) second = models.CharField(max_length=50) class Primary(models.Model): name = models.CharField(max_length=50) value = models.CharField(max_length=50) related = models.ForeignKey(Secondary, models.CASCADE) def __str__(self): return self.name class Child(Primary): pass class BigChild(Primary): other = models.CharField(max_length=50) class ChildProxy(Child): class Meta: proxy = True class RefreshPrimaryProxy(Primary): class Meta: proxy = True def refresh_from_db(self, using=None, fields=None, **kwargs): # Reloads all deferred fields if any of the fields is deferred. if fields is not None: fields = set(fields) deferred_fields = self.get_deferred_fields() if fields.intersection(deferred_fields): fields = fields.union(deferred_fields) super().refresh_from_db(using, fields, **kwargs) class ShadowParent(models.Model): """ ShadowParent declares a scalar, rather than a field. When this is overridden, the field value, rather than the scalar value must still be used when the field is deferred. """ name = 'aphrodite' class ShadowChild(ShadowParent): name = models.CharField(default='adonis', max_length=6)