from __future__ import unicode_literals import os from django.core.exceptions import ValidationError from django.db import models from django.utils.encoding import python_2_unicode_compatible from django.utils._os import upath class Person(models.Model): name = models.CharField(max_length=100) class Triple(models.Model): left = models.IntegerField() middle = models.IntegerField() right = models.IntegerField() class Meta: unique_together = (('left', 'middle'), ('middle', 'right')) class FilePathModel(models.Model): path = models.FilePathField(path=os.path.dirname(upath(__file__)), match=".*\.py$", blank=True) @python_2_unicode_compatible class Publication(models.Model): title = models.CharField(max_length=30) date_published = models.DateField() def __str__(self): return self.title @python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) publications = models.ManyToManyField(Publication) def __str__(self): return self.headline class CustomFileField(models.FileField): def save_form_data(self, instance, data): been_here = getattr(self, 'been_saved', False) assert not been_here, "save_form_data called more than once" setattr(self, 'been_saved', True) class CustomFF(models.Model): f = CustomFileField(upload_to='unused', blank=True) class RealPerson(models.Model): name = models.CharField(max_length=100) def clean(self): if self.name.lower() == 'anonymous': raise ValidationError("Please specify a real name.") class Author(models.Model): publication = models.OneToOneField(Publication, null=True, blank=True) full_name = models.CharField(max_length=255) class Author1(models.Model): publication = models.OneToOneField(Publication, null=False) full_name = models.CharField(max_length=255) class Homepage(models.Model): url = models.URLField() class Document(models.Model): myfile = models.FileField(upload_to='unused', blank=True) class Edition(models.Model): author = models.ForeignKey(Person) publication = models.ForeignKey(Publication) edition = models.IntegerField() isbn = models.CharField(max_length=13, unique=True) class Meta: unique_together = (('author', 'publication'), ('publication', 'edition'),)