123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- import datetime
- import tempfile
- import os
- from django.contrib.auth.models import User
- from django.contrib.contenttypes import generic
- from django.contrib.contenttypes.models import ContentType
- from django.core.files.storage import FileSystemStorage
- from django.db import models
- from django.utils.encoding import python_2_unicode_compatible
- class Section(models.Model):
- """
- A simple section that links to articles, to test linking to related items
- in admin views.
- """
- name = models.CharField(max_length=100)
- @python_2_unicode_compatible
- class Article(models.Model):
- """
- A simple article to test admin views. Test backwards compatibility.
- """
- title = models.CharField(max_length=100)
- content = models.TextField()
- date = models.DateTimeField()
- section = models.ForeignKey(Section, null=True, blank=True)
- def __str__(self):
- return self.title
- def model_year(self):
- return self.date.year
- model_year.admin_order_field = 'date'
- model_year.short_description = ''
- @python_2_unicode_compatible
- class Book(models.Model):
- """
- A simple book that has chapters.
- """
- name = models.CharField(max_length=100, verbose_name='¿Name?')
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class Promo(models.Model):
- name = models.CharField(max_length=100, verbose_name='¿Name?')
- book = models.ForeignKey(Book)
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class Chapter(models.Model):
- title = models.CharField(max_length=100, verbose_name='¿Title?')
- content = models.TextField()
- book = models.ForeignKey(Book)
- def __str__(self):
- return self.title
- class Meta:
- # Use a utf-8 bytestring to ensure it works (see #11710)
- verbose_name = '¿Chapter?'
- @python_2_unicode_compatible
- class ChapterXtra1(models.Model):
- chap = models.OneToOneField(Chapter, verbose_name='¿Chap?')
- xtra = models.CharField(max_length=100, verbose_name='¿Xtra?')
- def __str__(self):
- return '¿Xtra1: %s' % self.xtra
- @python_2_unicode_compatible
- class ChapterXtra2(models.Model):
- chap = models.OneToOneField(Chapter, verbose_name='¿Chap?')
- xtra = models.CharField(max_length=100, verbose_name='¿Xtra?')
- def __str__(self):
- return '¿Xtra2: %s' % self.xtra
- class RowLevelChangePermissionModel(models.Model):
- name = models.CharField(max_length=100, blank=True)
- class CustomArticle(models.Model):
- content = models.TextField()
- date = models.DateTimeField()
- @python_2_unicode_compatible
- class ModelWithStringPrimaryKey(models.Model):
- string_pk = models.CharField(max_length=255, primary_key=True)
- def __str__(self):
- return self.string_pk
- def get_absolute_url(self):
- return '/dummy/%s/' % self.string_pk
- @python_2_unicode_compatible
- class Color(models.Model):
- value = models.CharField(max_length=10)
- warm = models.BooleanField(default=False)
- def __str__(self):
- return self.value
- # we replicate Color to register with another ModelAdmin
- class Color2(Color):
- class Meta:
- proxy = True
- @python_2_unicode_compatible
- class Thing(models.Model):
- title = models.CharField(max_length=20)
- color = models.ForeignKey(Color, limit_choices_to={'warm': True})
- pub_date = models.DateField(blank=True, null=True)
- def __str__(self):
- return self.title
- @python_2_unicode_compatible
- class Actor(models.Model):
- name = models.CharField(max_length=50)
- age = models.IntegerField()
- title = models.CharField(max_length=50, null=True, blank=True)
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class Inquisition(models.Model):
- expected = models.BooleanField(default=False)
- leader = models.ForeignKey(Actor)
- country = models.CharField(max_length=20)
- def __str__(self):
- return "by %s from %s" % (self.leader, self.country)
- @python_2_unicode_compatible
- class Sketch(models.Model):
- title = models.CharField(max_length=100)
- inquisition = models.ForeignKey(Inquisition, limit_choices_to={'leader__name': 'Palin',
- 'leader__age': 27,
- 'expected': False,
- })
- defendant0 = models.ForeignKey(Actor, limit_choices_to={'title__isnull': False}, related_name='as_defendant0')
- defendant1 = models.ForeignKey(Actor, limit_choices_to={'title__isnull': True}, related_name='as_defendant1')
- def __str__(self):
- return self.title
- class Fabric(models.Model):
- NG_CHOICES = (
- ('Textured', (
- ('x', 'Horizontal'),
- ('y', 'Vertical'),
- )
- ),
- ('plain', 'Smooth'),
- )
- surface = models.CharField(max_length=20, choices=NG_CHOICES)
- @python_2_unicode_compatible
- class Person(models.Model):
- GENDER_CHOICES = (
- (1, "Male"),
- (2, "Female"),
- )
- name = models.CharField(max_length=100)
- gender = models.IntegerField(choices=GENDER_CHOICES)
- age = models.IntegerField(default=21)
- alive = models.BooleanField(default=True)
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class Persona(models.Model):
- """
- A simple persona associated with accounts, to test inlining of related
- accounts which inherit from a common accounts class.
- """
- name = models.CharField(blank=False, max_length=80)
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class Account(models.Model):
- """
- A simple, generic account encapsulating the information shared by all
- types of accounts.
- """
- username = models.CharField(blank=False, max_length=80)
- persona = models.ForeignKey(Persona, related_name="accounts")
- servicename = 'generic service'
- def __str__(self):
- return "%s: %s" % (self.servicename, self.username)
- class FooAccount(Account):
- """A service-specific account of type Foo."""
- servicename = 'foo'
- class BarAccount(Account):
- """A service-specific account of type Bar."""
- servicename = 'bar'
- @python_2_unicode_compatible
- class Subscriber(models.Model):
- name = models.CharField(blank=False, max_length=80)
- email = models.EmailField(blank=False, max_length=175)
- def __str__(self):
- return "%s (%s)" % (self.name, self.email)
- class ExternalSubscriber(Subscriber):
- pass
- class OldSubscriber(Subscriber):
- pass
- class Media(models.Model):
- name = models.CharField(max_length=60)
- class Podcast(Media):
- release_date = models.DateField()
- class Meta:
- ordering = ('release_date',) # overridden in PodcastAdmin
- class Vodcast(Media):
- media = models.OneToOneField(Media, primary_key=True, parent_link=True)
- released = models.BooleanField(default=False)
- class Parent(models.Model):
- name = models.CharField(max_length=128)
- class Child(models.Model):
- parent = models.ForeignKey(Parent, editable=False)
- name = models.CharField(max_length=30, blank=True)
- @python_2_unicode_compatible
- class EmptyModel(models.Model):
- def __str__(self):
- return "Primary key = %s" % self.id
- temp_storage = FileSystemStorage(tempfile.mkdtemp(dir=os.environ['DJANGO_TEST_TEMP_DIR']))
- UPLOAD_TO = os.path.join(temp_storage.location, 'test_upload')
- class Gallery(models.Model):
- name = models.CharField(max_length=100)
- class Picture(models.Model):
- name = models.CharField(max_length=100)
- image = models.FileField(storage=temp_storage, upload_to='test_upload')
- gallery = models.ForeignKey(Gallery, related_name="pictures")
- class Language(models.Model):
- iso = models.CharField(max_length=5, primary_key=True)
- name = models.CharField(max_length=50)
- english_name = models.CharField(max_length=50)
- shortlist = models.BooleanField(default=False)
- class Meta:
- ordering = ('iso',)
- # a base class for Recommender and Recommendation
- class Title(models.Model):
- pass
- class TitleTranslation(models.Model):
- title = models.ForeignKey(Title)
- text = models.CharField(max_length=100)
- class Recommender(Title):
- pass
- class Recommendation(Title):
- recommender = models.ForeignKey(Recommender)
- class Collector(models.Model):
- name = models.CharField(max_length=100)
- class Widget(models.Model):
- owner = models.ForeignKey(Collector)
- name = models.CharField(max_length=100)
- class DooHickey(models.Model):
- code = models.CharField(max_length=10, primary_key=True)
- owner = models.ForeignKey(Collector)
- name = models.CharField(max_length=100)
- class Grommet(models.Model):
- code = models.AutoField(primary_key=True)
- owner = models.ForeignKey(Collector)
- name = models.CharField(max_length=100)
- class Whatsit(models.Model):
- index = models.IntegerField(primary_key=True)
- owner = models.ForeignKey(Collector)
- name = models.CharField(max_length=100)
- class Doodad(models.Model):
- name = models.CharField(max_length=100)
- class FancyDoodad(Doodad):
- owner = models.ForeignKey(Collector)
- expensive = models.BooleanField(default=True)
- @python_2_unicode_compatible
- class Category(models.Model):
- collector = models.ForeignKey(Collector)
- order = models.PositiveIntegerField()
- class Meta:
- ordering = ('order',)
- def __str__(self):
- return '%s:o%s' % (self.id, self.order)
- class Link(models.Model):
- posted = models.DateField(
- default=lambda: datetime.date.today() - datetime.timedelta(days=7)
- )
- url = models.URLField()
- post = models.ForeignKey("Post")
- class PrePopulatedPost(models.Model):
- title = models.CharField(max_length=100)
- published = models.BooleanField(default=False)
- slug = models.SlugField()
- class PrePopulatedSubPost(models.Model):
- post = models.ForeignKey(PrePopulatedPost)
- subtitle = models.CharField(max_length=100)
- subslug = models.SlugField()
- class Post(models.Model):
- title = models.CharField(max_length=100, help_text="Some help text for the title (with unicode ŠĐĆŽćžšđ)")
- content = models.TextField(help_text="Some help text for the content (with unicode ŠĐĆŽćžšđ)")
- posted = models.DateField(
- default=datetime.date.today,
- help_text="Some help text for the date (with unicode ŠĐĆŽćžšđ)"
- )
- public = models.NullBooleanField()
- def awesomeness_level(self):
- return "Very awesome."
- @python_2_unicode_compatible
- class Gadget(models.Model):
- name = models.CharField(max_length=100)
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class Villain(models.Model):
- name = models.CharField(max_length=100)
- def __str__(self):
- return self.name
- class SuperVillain(Villain):
- pass
- @python_2_unicode_compatible
- class FunkyTag(models.Model):
- "Because we all know there's only one real use case for GFKs."
- name = models.CharField(max_length=25)
- content_type = models.ForeignKey(ContentType)
- object_id = models.PositiveIntegerField()
- content_object = generic.GenericForeignKey('content_type', 'object_id')
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class Plot(models.Model):
- name = models.CharField(max_length=100)
- team_leader = models.ForeignKey(Villain, related_name='lead_plots')
- contact = models.ForeignKey(Villain, related_name='contact_plots')
- tags = generic.GenericRelation(FunkyTag)
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class PlotDetails(models.Model):
- details = models.CharField(max_length=100)
- plot = models.OneToOneField(Plot)
- def __str__(self):
- return self.details
- @python_2_unicode_compatible
- class SecretHideout(models.Model):
- """ Secret! Not registered with the admin! """
- location = models.CharField(max_length=100)
- villain = models.ForeignKey(Villain)
- def __str__(self):
- return self.location
- @python_2_unicode_compatible
- class SuperSecretHideout(models.Model):
- """ Secret! Not registered with the admin! """
- location = models.CharField(max_length=100)
- supervillain = models.ForeignKey(SuperVillain)
- def __str__(self):
- return self.location
- @python_2_unicode_compatible
- class CyclicOne(models.Model):
- name = models.CharField(max_length=25)
- two = models.ForeignKey('CyclicTwo')
- def __str__(self):
- return self.name
- @python_2_unicode_compatible
- class CyclicTwo(models.Model):
- name = models.CharField(max_length=25)
- one = models.ForeignKey(CyclicOne)
- def __str__(self):
- return self.name
- class Topping(models.Model):
- name = models.CharField(max_length=20)
- class Pizza(models.Model):
- name = models.CharField(max_length=20)
- toppings = models.ManyToManyField('Topping', related_name='pizzas')
- class Album(models.Model):
- owner = models.ForeignKey(User)
- title = models.CharField(max_length=30)
- class Employee(Person):
- code = models.CharField(max_length=20)
- class WorkHour(models.Model):
- datum = models.DateField()
- employee = models.ForeignKey(Employee)
- class Question(models.Model):
- question = models.CharField(max_length=20)
- @python_2_unicode_compatible
- class Answer(models.Model):
- question = models.ForeignKey(Question, on_delete=models.PROTECT)
- answer = models.CharField(max_length=20)
- def __str__(self):
- return self.answer
- class Reservation(models.Model):
- start_date = models.DateTimeField()
- price = models.IntegerField()
- DRIVER_CHOICES = (
- ('bill', 'Bill G'),
- ('steve', 'Steve J'),
- )
- RESTAURANT_CHOICES = (
- ('indian', 'A Taste of India'),
- ('thai', 'Thai Pography'),
- ('pizza', 'Pizza Mama'),
- )
- class FoodDelivery(models.Model):
- reference = models.CharField(max_length=100)
- driver = models.CharField(max_length=100, choices=DRIVER_CHOICES, blank=True)
- restaurant = models.CharField(max_length=100, choices=RESTAURANT_CHOICES, blank=True)
- class Meta:
- unique_together = (("driver", "restaurant"),)
- @python_2_unicode_compatible
- class CoverLetter(models.Model):
- author = models.CharField(max_length=30)
- date_written = models.DateField(null=True, blank=True)
- def __str__(self):
- return self.author
- class Paper(models.Model):
- title = models.CharField(max_length=30)
- author = models.CharField(max_length=30, blank=True, null=True)
- class ShortMessage(models.Model):
- content = models.CharField(max_length=140)
- timestamp = models.DateTimeField(null=True, blank=True)
- @python_2_unicode_compatible
- class Telegram(models.Model):
- title = models.CharField(max_length=30)
- date_sent = models.DateField(null=True, blank=True)
- def __str__(self):
- return self.title
- class Story(models.Model):
- title = models.CharField(max_length=100)
- content = models.TextField()
- class OtherStory(models.Model):
- title = models.CharField(max_length=100)
- content = models.TextField()
- class ComplexSortedPerson(models.Model):
- name = models.CharField(max_length=100)
- age = models.PositiveIntegerField()
- is_employee = models.NullBooleanField()
- class PluggableSearchPerson(models.Model):
- name = models.CharField(max_length=100)
- age = models.PositiveIntegerField()
- class PrePopulatedPostLargeSlug(models.Model):
- """
- Regression test for #15938: a large max_length for the slugfield must not
- be localized in prepopulated_fields_js.html or it might end up breaking
- the javascript (ie, using THOUSAND_SEPARATOR ends up with maxLength=1,000)
- """
- title = models.CharField(max_length=100)
- published = models.BooleanField(default=False)
- slug = models.SlugField(max_length=1000)
- class AdminOrderedField(models.Model):
- order = models.IntegerField()
- stuff = models.CharField(max_length=200)
- class AdminOrderedModelMethod(models.Model):
- order = models.IntegerField()
- stuff = models.CharField(max_length=200)
- def some_order(self):
- return self.order
- some_order.admin_order_field = 'order'
- class AdminOrderedAdminMethod(models.Model):
- order = models.IntegerField()
- stuff = models.CharField(max_length=200)
- class AdminOrderedCallable(models.Model):
- order = models.IntegerField()
- stuff = models.CharField(max_length=200)
- @python_2_unicode_compatible
- class Report(models.Model):
- title = models.CharField(max_length=100)
- def __str__(self):
- return self.title
- class MainPrepopulated(models.Model):
- name = models.CharField(max_length=100)
- pubdate = models.DateField()
- status = models.CharField(
- max_length=20,
- choices=(('option one', 'Option One'),
- ('option two', 'Option Two')))
- slug1 = models.SlugField(blank=True)
- slug2 = models.SlugField(blank=True)
- class RelatedPrepopulated(models.Model):
- parent = models.ForeignKey(MainPrepopulated)
- name = models.CharField(max_length=75)
- pubdate = models.DateField()
- status = models.CharField(
- max_length=20,
- choices=(('option one', 'Option One'),
- ('option two', 'Option Two')))
- slug1 = models.SlugField(max_length=50)
- slug2 = models.SlugField(max_length=60)
- class UnorderedObject(models.Model):
- """
- Model without any defined `Meta.ordering`.
- Refs #16819.
- """
- name = models.CharField(max_length=255)
- bool = models.BooleanField(default=True)
- class UndeletableObject(models.Model):
- """
- Model whose show_delete in admin change_view has been disabled
- Refs #10057.
- """
- name = models.CharField(max_length=255)
- class UnchangeableObject(models.Model):
- """
- Model whose change_view is disabled in admin
- Refs #20640.
- """
- class UserMessenger(models.Model):
- """
- Dummy class for testing message_user functions on ModelAdmin
- """
- class Simple(models.Model):
- """
- Simple model with nothing on it for use in testing
- """
- class Choice(models.Model):
- choice = models.IntegerField(blank=True, null=True,
- choices=((1, 'Yes'), (0, 'No'), (None, 'No opinion')))
- class _Manager(models.Manager):
- def get_queryset(self):
- return super(_Manager, self).get_queryset().filter(pk__gt=1)
- class FilteredManager(models.Model):
- def __str__(self):
- return "PK=%d" % self.pk
- pk_gt_1 = _Manager()
- objects = models.Manager()
- class EmptyModelVisible(models.Model):
- """ See ticket #11277. """
- class EmptyModelHidden(models.Model):
- """ See ticket #11277. """
- class EmptyModelMixin(models.Model):
- """ See ticket #11277. """
|