1 2 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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
# Copyright: See the LICENSE file.
"""Helpers for testing django apps."""
import os.path
from django.conf import settings
from django.db import models
from django.db.models import signals
try:
from PIL import Image
except ImportError:
Image = None
class StandardModel(models.Model):
foo = models.CharField(max_length=20)
class NonIntegerPk(models.Model):
foo = models.CharField(max_length=20, primary_key=True)
bar = models.CharField(max_length=20, blank=True)
class MultifieldModel(models.Model):
slug = models.SlugField(max_length=20, unique=True)
text = models.TextField()
class MultifieldUniqueModel(models.Model):
slug = models.SlugField(max_length=20, unique=True)
text = models.CharField(max_length=20, unique=True)
title = models.CharField(max_length=20, unique=True)
class AbstractBase(models.Model):
foo = models.CharField(max_length=20)
class Meta:
abstract = True
class ConcreteSon(AbstractBase):
pass
class AbstractSon(AbstractBase):
class Meta:
abstract = True
class ConcreteGrandSon(AbstractSon):
pass
class StandardSon(StandardModel):
pass
class PointedModel(models.Model):
foo = models.CharField(max_length=20)
class PointerModel(models.Model):
bar = models.CharField(max_length=20)
pointed = models.OneToOneField(
PointedModel,
related_name='pointer',
null=True,
on_delete=models.CASCADE
)
class WithDefaultValue(models.Model):
foo = models.CharField(max_length=20, default='')
class WithPassword(models.Model):
pw = models.CharField(max_length=128)
WITHFILE_UPLOAD_TO = 'django'
WITHFILE_UPLOAD_DIR = os.path.join(settings.MEDIA_ROOT, WITHFILE_UPLOAD_TO)
class WithFile(models.Model):
afile = models.FileField(upload_to=WITHFILE_UPLOAD_TO)
if Image is not None: # PIL is available
class WithImage(models.Model):
animage = models.ImageField(upload_to=WITHFILE_UPLOAD_TO)
size = models.IntegerField(default=0)
else:
class WithImage(models.Model):
pass
class WithSignals(models.Model):
foo = models.CharField(max_length=20)
def __init__(self, post_save_signal_receiver=None):
super().__init__()
if post_save_signal_receiver:
signals.post_save.connect(
post_save_signal_receiver,
sender=self.__class__,
)
class CustomManager(models.Manager):
def create(self, arg=None, **kwargs):
return super().create(**kwargs)
class WithCustomManager(models.Model):
foo = models.CharField(max_length=20)
objects = CustomManager()
class AbstractWithCustomManager(models.Model):
custom_objects = CustomManager()
class Meta:
abstract = True
class FromAbstractWithCustomManager(AbstractWithCustomManager):
pass
class HasMultifieldModel(models.Model):
multifield = models.ForeignKey(to=MultifieldModel, on_delete=models.CASCADE)
|