| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 
 | """
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 PrimaryOneToOne(models.Model):
    name = models.CharField(max_length=50)
    value = models.CharField(max_length=50)
    related = models.OneToOneField(
        Secondary, models.CASCADE, related_name="primary_o2o"
    )
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)
 |