|
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() |