parts/django/tests/modeltests/validation/models.py
changeset 69 c6bca38c1cbf
equal deleted inserted replaced
68:5ff1fc726848 69:c6bca38c1cbf
       
     1 from datetime import datetime
       
     2 from django.core.exceptions import ValidationError
       
     3 from django.db import models
       
     4 from django.test import TestCase
       
     5 
       
     6 
       
     7 def validate_answer_to_universe(value):
       
     8     if value != 42:
       
     9         raise ValidationError('This is not the answer to life, universe and everything!', code='not42')
       
    10 
       
    11 class ModelToValidate(models.Model):
       
    12     name = models.CharField(max_length=100)
       
    13     created = models.DateTimeField(default=datetime.now)
       
    14     number = models.IntegerField(db_column='number_val')
       
    15     parent = models.ForeignKey('self', blank=True, null=True, limit_choices_to={'number': 10})
       
    16     email = models.EmailField(blank=True)
       
    17     url = models.URLField(blank=True)
       
    18     f_with_custom_validator = models.IntegerField(blank=True, null=True, validators=[validate_answer_to_universe])
       
    19 
       
    20     def clean(self):
       
    21         super(ModelToValidate, self).clean()
       
    22         if self.number == 11:
       
    23             raise ValidationError('Invalid number supplied!')
       
    24 
       
    25 class UniqueFieldsModel(models.Model):
       
    26     unique_charfield = models.CharField(max_length=100, unique=True)
       
    27     unique_integerfield = models.IntegerField(unique=True)
       
    28     non_unique_field = models.IntegerField()
       
    29 
       
    30 class CustomPKModel(models.Model):
       
    31     my_pk_field = models.CharField(max_length=100, primary_key=True)
       
    32 
       
    33 class UniqueTogetherModel(models.Model):
       
    34     cfield = models.CharField(max_length=100)
       
    35     ifield = models.IntegerField()
       
    36     efield = models.EmailField()
       
    37 
       
    38     class Meta:
       
    39         unique_together = (('ifield', 'cfield',), ['ifield', 'efield'])
       
    40 
       
    41 class UniqueForDateModel(models.Model):
       
    42     start_date = models.DateField()
       
    43     end_date = models.DateTimeField()
       
    44     count = models.IntegerField(unique_for_date="start_date", unique_for_year="end_date")
       
    45     order = models.IntegerField(unique_for_month="end_date")
       
    46     name = models.CharField(max_length=100)
       
    47 
       
    48 class CustomMessagesModel(models.Model):
       
    49     other  = models.IntegerField(blank=True, null=True)
       
    50     number = models.IntegerField(db_column='number_val',
       
    51         error_messages={'null': 'NULL', 'not42': 'AAARGH', 'not_equal': '%s != me'},
       
    52         validators=[validate_answer_to_universe]
       
    53     )
       
    54 
       
    55 class Author(models.Model):
       
    56     name = models.CharField(max_length=100)
       
    57 
       
    58 class Article(models.Model):
       
    59     title = models.CharField(max_length=100)
       
    60     author = models.ForeignKey(Author)
       
    61     pub_date = models.DateTimeField(blank=True)
       
    62 
       
    63     def clean(self):
       
    64         if self.pub_date is None:
       
    65             self.pub_date = datetime.now()