summaryrefslogtreecommitdiff
path: root/tests/admin_views/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/admin_views/models.py')
-rw-r--r--tests/admin_views/models.py238
1 files changed, 140 insertions, 98 deletions
diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py
index c2972e0940..f6632816e8 100644
--- a/tests/admin_views/models.py
+++ b/tests/admin_views/models.py
@@ -4,9 +4,7 @@ import uuid
from django.contrib import admin
from django.contrib.auth.models import User
-from django.contrib.contenttypes.fields import (
- GenericForeignKey, GenericRelation,
-)
+from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from django.core.files.storage import FileSystemStorage
@@ -18,6 +16,7 @@ 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)
def __str__(self):
@@ -35,26 +34,31 @@ 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, models.CASCADE, null=True, blank=True)
- another_section = models.ForeignKey(Section, models.CASCADE, null=True, blank=True, related_name='+')
- sub_section = models.ForeignKey(Section, models.SET_NULL, null=True, blank=True, related_name='+')
+ another_section = models.ForeignKey(
+ Section, models.CASCADE, null=True, blank=True, related_name="+"
+ )
+ sub_section = models.ForeignKey(
+ Section, models.SET_NULL, null=True, blank=True, related_name="+"
+ )
def __str__(self):
return self.title
- @admin.display(ordering='date', description='')
+ @admin.display(ordering="date", description="")
def model_year(self):
return self.date.year
- @admin.display(ordering='-date', description='')
+ @admin.display(ordering="-date", description="")
def model_year_reversed(self):
return self.date.year
@property
- @admin.display(ordering='date')
+ @admin.display(ordering="date")
def model_property_year(self):
return self.date.year
@@ -67,14 +71,15 @@ class Book(models.Model):
"""
A simple book that has chapters.
"""
- name = models.CharField(max_length=100, verbose_name='¿Name?')
+
+ name = models.CharField(max_length=100, verbose_name="¿Name?")
def __str__(self):
return self.name
class Promo(models.Model):
- name = models.CharField(max_length=100, verbose_name='¿Name?')
+ name = models.CharField(max_length=100, verbose_name="¿Name?")
book = models.ForeignKey(Book, models.CASCADE)
author = models.ForeignKey(User, models.SET_NULL, blank=True, null=True)
@@ -83,33 +88,33 @@ class Promo(models.Model):
class Chapter(models.Model):
- title = models.CharField(max_length=100, verbose_name='¿Title?')
+ title = models.CharField(max_length=100, verbose_name="¿Title?")
content = models.TextField()
book = models.ForeignKey(Book, models.CASCADE)
class Meta:
# Use a utf-8 bytestring to ensure it works (see #11710)
- verbose_name = '¿Chapter?'
+ verbose_name = "¿Chapter?"
def __str__(self):
return self.title
class ChapterXtra1(models.Model):
- chap = models.OneToOneField(Chapter, models.CASCADE, verbose_name='¿Chap?')
- xtra = models.CharField(max_length=100, verbose_name='¿Xtra?')
+ chap = models.OneToOneField(Chapter, models.CASCADE, verbose_name="¿Chap?")
+ xtra = models.CharField(max_length=100, verbose_name="¿Xtra?")
guest_author = models.ForeignKey(User, models.SET_NULL, blank=True, null=True)
def __str__(self):
- return '¿Xtra1: %s' % self.xtra
+ return "¿Xtra1: %s" % self.xtra
class ChapterXtra2(models.Model):
- chap = models.OneToOneField(Chapter, models.CASCADE, verbose_name='¿Chap?')
- xtra = models.CharField(max_length=100, verbose_name='¿Xtra?')
+ chap = models.OneToOneField(Chapter, models.CASCADE, verbose_name="¿Chap?")
+ xtra = models.CharField(max_length=100, verbose_name="¿Xtra?")
def __str__(self):
- return '¿Xtra2: %s' % self.xtra
+ return "¿Xtra2: %s" % self.xtra
class RowLevelChangePermissionModel(models.Model):
@@ -128,7 +133,7 @@ class ModelWithStringPrimaryKey(models.Model):
return self.string_pk
def get_absolute_url(self):
- return '/dummy/%s/' % self.string_pk
+ return "/dummy/%s/" % self.string_pk
class Color(models.Model):
@@ -147,7 +152,7 @@ class Color2(Color):
class Thing(models.Model):
title = models.CharField(max_length=20)
- color = models.ForeignKey(Color, models.CASCADE, limit_choices_to={'warm': True})
+ color = models.ForeignKey(Color, models.CASCADE, limit_choices_to={"warm": True})
pub_date = models.DateField(blank=True, null=True)
def __str__(self):
@@ -178,22 +183,22 @@ class Sketch(models.Model):
Inquisition,
models.CASCADE,
limit_choices_to={
- 'leader__name': 'Palin',
- 'leader__age': 27,
- 'expected': False,
+ "leader__name": "Palin",
+ "leader__age": 27,
+ "expected": False,
},
)
defendant0 = models.ForeignKey(
Actor,
models.CASCADE,
- limit_choices_to={'title__isnull': False},
- related_name='as_defendant0',
+ limit_choices_to={"title__isnull": False},
+ related_name="as_defendant0",
)
defendant1 = models.ForeignKey(
Actor,
models.CASCADE,
- limit_choices_to={'title__isnull': True},
- related_name='as_defendant1',
+ limit_choices_to={"title__isnull": True},
+ related_name="as_defendant1",
)
def __str__(self):
@@ -224,7 +229,9 @@ class StumpJoke(models.Model):
limit_choices_to=today_callable_dict,
related_name="+",
)
- has_fooled_today = models.ManyToManyField(Character, limit_choices_to=today_callable_q, related_name="+")
+ has_fooled_today = models.ManyToManyField(
+ Character, limit_choices_to=today_callable_q, related_name="+"
+ )
def __str__(self):
return self.variation
@@ -232,11 +239,14 @@ class StumpJoke(models.Model):
class Fabric(models.Model):
NG_CHOICES = (
- ('Textured', (
- ('x', 'Horizontal'),
- ('y', 'Vertical'),
- )),
- ('plain', 'Smooth'),
+ (
+ "Textured",
+ (
+ ("x", "Horizontal"),
+ ("y", "Vertical"),
+ ),
+ ),
+ ("plain", "Smooth"),
)
surface = models.CharField(max_length=20, choices=NG_CHOICES)
@@ -260,6 +270,7 @@ 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):
@@ -271,9 +282,10 @@ 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, models.CASCADE, related_name="accounts")
- servicename = 'generic service'
+ servicename = "generic service"
def __str__(self):
return "%s: %s" % (self.servicename, self.username)
@@ -281,12 +293,14 @@ class Account(models.Model):
class FooAccount(Account):
"""A service-specific account of type Foo."""
- servicename = 'foo'
+
+ servicename = "foo"
class BarAccount(Account):
"""A service-specific account of type Bar."""
- servicename = 'bar'
+
+ servicename = "bar"
class Subscriber(models.Model):
@@ -313,11 +327,13 @@ class Podcast(Media):
release_date = models.DateField()
class Meta:
- ordering = ('release_date',) # overridden in PodcastAdmin
+ ordering = ("release_date",) # overridden in PodcastAdmin
class Vodcast(Media):
- media = models.OneToOneField(Media, models.CASCADE, primary_key=True, parent_link=True)
+ media = models.OneToOneField(
+ Media, models.CASCADE, primary_key=True, parent_link=True
+ )
released = models.BooleanField(default=False)
@@ -325,8 +341,8 @@ class Parent(models.Model):
name = models.CharField(max_length=128)
def clean(self):
- if self.name == '_invalid':
- raise ValidationError('invalid')
+ if self.name == "_invalid":
+ raise ValidationError("invalid")
class Child(models.Model):
@@ -334,19 +350,20 @@ class Child(models.Model):
name = models.CharField(max_length=30, blank=True)
def clean(self):
- if self.name == '_invalid':
- raise ValidationError('invalid')
+ if self.name == "_invalid":
+ raise ValidationError("invalid")
class PKChild(models.Model):
"""
Used to check autocomplete to_field resolution when ForeignKey is PK.
"""
+
parent = models.ForeignKey(Parent, models.CASCADE, primary_key=True)
name = models.CharField(max_length=128)
class Meta:
- ordering = ['parent']
+ ordering = ["parent"]
def __str__(self):
return self.name
@@ -370,7 +387,7 @@ class Gallery(models.Model):
class Picture(models.Model):
name = models.CharField(max_length=100)
- image = models.FileField(storage=temp_storage, upload_to='test_upload')
+ image = models.FileField(storage=temp_storage, upload_to="test_upload")
gallery = models.ForeignKey(Gallery, models.CASCADE, related_name="pictures")
@@ -384,7 +401,7 @@ class Language(models.Model):
return self.iso
class Meta:
- ordering = ('iso',)
+ ordering = ("iso",)
# a base class for Recommender and Recommendation
@@ -446,10 +463,10 @@ class Category(models.Model):
order = models.PositiveIntegerField()
class Meta:
- ordering = ('order',)
+ ordering = ("order",)
def __str__(self):
- return '%s:o%s' % (self.id, self.order)
+ return "%s:o%s" % (self.id, self.order)
def link_posted_default():
@@ -476,12 +493,16 @@ class PrePopulatedSubPost(models.Model):
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 ŠĐĆŽćžšđ)')
+ 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 ŠĐĆŽćžšđ)"
+ )
readonly_content = models.TextField()
posted = models.DateField(
default=datetime.date.today,
- help_text='Some help text for the date (with Unicode ŠĐĆŽćžšđ)',
+ help_text="Some help text for the date (with Unicode ŠĐĆŽćžšđ)",
)
public = models.BooleanField(null=True, blank=True)
@@ -519,7 +540,7 @@ class FunkyTag(models.Model):
name = models.CharField(max_length=25)
content_type = models.ForeignKey(ContentType, models.CASCADE)
object_id = models.PositiveIntegerField()
- content_object = GenericForeignKey('content_type', 'object_id')
+ content_object = GenericForeignKey("content_type", "object_id")
def __str__(self):
return self.name
@@ -527,8 +548,8 @@ class FunkyTag(models.Model):
class Plot(models.Model):
name = models.CharField(max_length=100)
- team_leader = models.ForeignKey(Villain, models.CASCADE, related_name='lead_plots')
- contact = models.ForeignKey(Villain, models.CASCADE, related_name='contact_plots')
+ team_leader = models.ForeignKey(Villain, models.CASCADE, related_name="lead_plots")
+ contact = models.ForeignKey(Villain, models.CASCADE, related_name="contact_plots")
tags = GenericRelation(FunkyTag)
def __str__(self):
@@ -549,7 +570,8 @@ class PlotProxy(Plot):
class SecretHideout(models.Model):
- """ Secret! Not registered with the admin! """
+ """Secret! Not registered with the admin!"""
+
location = models.CharField(max_length=100)
villain = models.ForeignKey(Villain, models.CASCADE)
@@ -558,7 +580,8 @@ class SecretHideout(models.Model):
class SuperSecretHideout(models.Model):
- """ Secret! Not registered with the admin! """
+ """Secret! Not registered with the admin!"""
+
location = models.CharField(max_length=100)
supervillain = models.ForeignKey(SuperVillain, models.CASCADE)
@@ -568,7 +591,7 @@ class SuperSecretHideout(models.Model):
class Bookmark(models.Model):
name = models.CharField(max_length=60)
- tag = GenericRelation(FunkyTag, related_query_name='bookmark')
+ tag = GenericRelation(FunkyTag, related_query_name="bookmark")
def __str__(self):
return self.name
@@ -576,7 +599,7 @@ class Bookmark(models.Model):
class CyclicOne(models.Model):
name = models.CharField(max_length=25)
- two = models.ForeignKey('CyclicTwo', models.CASCADE)
+ two = models.ForeignKey("CyclicTwo", models.CASCADE)
def __str__(self):
return self.name
@@ -599,7 +622,7 @@ class Topping(models.Model):
class Pizza(models.Model):
name = models.CharField(max_length=20)
- toppings = models.ManyToManyField('Topping', related_name='pizzas')
+ toppings = models.ManyToManyField("Topping", related_name="pizzas")
# Pizza's ModelAdmin has readonly_fields = ['toppings'].
@@ -634,7 +657,7 @@ class Employee(Person):
code = models.CharField(max_length=20)
class Meta:
- ordering = ['name']
+ ordering = ["name"]
class WorkHour(models.Model):
@@ -646,6 +669,7 @@ class Manager(Employee):
"""
A multi-layer MTI child.
"""
+
pass
@@ -658,7 +682,7 @@ class Question(models.Model):
question = models.CharField(max_length=20)
posted = models.DateField(default=datetime.date.today)
expires = models.DateTimeField(null=True, blank=True)
- related_questions = models.ManyToManyField('self')
+ related_questions = models.ManyToManyField("self")
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
def __str__(self):
@@ -668,12 +692,15 @@ class Question(models.Model):
class Answer(models.Model):
question = models.ForeignKey(Question, models.PROTECT)
question_with_to_field = models.ForeignKey(
- Question, models.SET_NULL,
- blank=True, null=True, to_field='uuid',
- related_name='uuid_answers',
- limit_choices_to=~models.Q(question__istartswith='not'),
+ Question,
+ models.SET_NULL,
+ blank=True,
+ null=True,
+ to_field="uuid",
+ related_name="uuid_answers",
+ limit_choices_to=~models.Q(question__istartswith="not"),
)
- related_answers = models.ManyToManyField('self')
+ related_answers = models.ManyToManyField("self")
answer = models.CharField(max_length=20)
def __str__(self):
@@ -692,17 +719,19 @@ class Reservation(models.Model):
class FoodDelivery(models.Model):
DRIVER_CHOICES = (
- ('bill', 'Bill G'),
- ('steve', 'Steve J'),
+ ("bill", "Bill G"),
+ ("steve", "Steve J"),
)
RESTAURANT_CHOICES = (
- ('indian', 'A Taste of India'),
- ('thai', 'Thai Pography'),
- ('pizza', 'Pizza Mama'),
+ ("indian", "A Taste of India"),
+ ("thai", "Thai Pography"),
+ ("pizza", "Pizza Mama"),
)
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)
+ restaurant = models.CharField(
+ max_length=100, choices=RESTAURANT_CHOICES, blank=True
+ )
class Meta:
unique_together = (("driver", "restaurant"),)
@@ -761,6 +790,7 @@ class PrePopulatedPostLargeSlug(models.Model):
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)
# `db_index=False` because MySQL cannot index large CharField (#21196).
@@ -776,7 +806,7 @@ class AdminOrderedModelMethod(models.Model):
order = models.IntegerField()
stuff = models.CharField(max_length=200)
- @admin.display(ordering='order')
+ @admin.display(ordering="order")
def some_order(self):
return self.order
@@ -803,8 +833,8 @@ class MainPrepopulated(models.Model):
pubdate = models.DateField()
status = models.CharField(
max_length=20,
- choices=(('option one', 'Option One'),
- ('option two', 'Option Two')))
+ choices=(("option one", "Option One"), ("option two", "Option Two")),
+ )
slug1 = models.SlugField(blank=True)
slug2 = models.SlugField(blank=True)
slug3 = models.SlugField(blank=True, allow_unicode=True)
@@ -813,13 +843,13 @@ class MainPrepopulated(models.Model):
class RelatedPrepopulated(models.Model):
parent = models.ForeignKey(MainPrepopulated, models.CASCADE)
name = models.CharField(max_length=75)
- fk = models.ForeignKey('self', models.CASCADE, blank=True, null=True)
- m2m = models.ManyToManyField('self', blank=True)
+ fk = models.ForeignKey("self", models.CASCADE, blank=True, null=True)
+ m2m = models.ManyToManyField("self", blank=True)
pubdate = models.DateField()
status = models.CharField(
max_length=20,
- choices=(('option one', 'Option One'),
- ('option two', 'Option Two')))
+ choices=(("option one", "Option One"), ("option two", "Option Two")),
+ )
slug1 = models.SlugField(max_length=50)
slug2 = models.SlugField(max_length=60)
@@ -829,6 +859,7 @@ class UnorderedObject(models.Model):
Model without any defined `Meta.ordering`.
Refs #16819.
"""
+
name = models.CharField(max_length=255)
bool = models.BooleanField(default=True)
@@ -838,6 +869,7 @@ class UndeletableObject(models.Model):
Model whose show_delete in admin change_view has been disabled
Refs #10057.
"""
+
name = models.CharField(max_length=255)
@@ -862,8 +894,9 @@ class Simple(models.Model):
class Choice(models.Model):
choice = models.IntegerField(
- blank=True, null=True,
- choices=((1, 'Yes'), (0, 'No'), (None, 'No opinion')),
+ blank=True,
+ null=True,
+ choices=((1, "Yes"), (0, "No"), (None, "No opinion")),
)
@@ -873,6 +906,7 @@ class ParentWithDependentChildren(models.Model):
Model where the validation of child foreign-key relationships depends
on validation of the parent
"""
+
some_required_info = models.PositiveIntegerField()
family_name = models.CharField(max_length=255, blank=False)
@@ -883,6 +917,7 @@ class DependentChild(models.Model):
Model that depends on validation of the parent class for one of its
fields to validate during clean
"""
+
parent = models.ForeignKey(ParentWithDependentChildren, models.CASCADE)
family_name = models.CharField(max_length=255)
@@ -901,27 +936,27 @@ class FilteredManager(models.Model):
class EmptyModelVisible(models.Model):
- """ See ticket #11277. """
+ """See ticket #11277."""
class EmptyModelHidden(models.Model):
- """ See ticket #11277. """
+ """See ticket #11277."""
class EmptyModelMixin(models.Model):
- """ See ticket #11277. """
+ """See ticket #11277."""
class State(models.Model):
- name = models.CharField(max_length=100, verbose_name='State verbose_name')
+ name = models.CharField(max_length=100, verbose_name="State verbose_name")
class City(models.Model):
state = models.ForeignKey(State, models.CASCADE)
- name = models.CharField(max_length=100, verbose_name='City verbose_name')
+ name = models.CharField(max_length=100, verbose_name="City verbose_name")
def get_absolute_url(self):
- return '/dummy/%s/' % self.pk
+ return "/dummy/%s/" % self.pk
class Restaurant(models.Model):
@@ -929,7 +964,7 @@ class Restaurant(models.Model):
name = models.CharField(max_length=100)
def get_absolute_url(self):
- return '/dummy/%s/' % self.pk
+ return "/dummy/%s/" % self.pk
class Worker(models.Model):
@@ -947,8 +982,8 @@ class ParentWithFK(models.Model):
fk = models.ForeignKey(
ReferencedByParent,
models.CASCADE,
- to_field='name',
- related_name='hidden+',
+ to_field="name",
+ related_name="hidden+",
)
@@ -970,8 +1005,8 @@ class InlineReference(models.Model):
fk = models.ForeignKey(
ReferencedByInline,
models.CASCADE,
- to_field='name',
- related_name='hidden+',
+ to_field="name",
+ related_name="hidden+",
)
@@ -981,12 +1016,12 @@ class Recipe(models.Model):
class Ingredient(models.Model):
iname = models.CharField(max_length=20, unique=True)
- recipes = models.ManyToManyField(Recipe, through='RecipeIngredient')
+ recipes = models.ManyToManyField(Recipe, through="RecipeIngredient")
class RecipeIngredient(models.Model):
- ingredient = models.ForeignKey(Ingredient, models.CASCADE, to_field='iname')
- recipe = models.ForeignKey(Recipe, models.CASCADE, to_field='rname')
+ ingredient = models.ForeignKey(Ingredient, models.CASCADE, to_field="iname")
+ recipe = models.ForeignKey(Recipe, models.CASCADE, to_field="rname")
# Model for #23839
@@ -1008,7 +1043,7 @@ class ImplicitlyGeneratedPK(models.Model):
class ReferencedByGenRel(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
- content_object = GenericForeignKey('content_type', 'object_id')
+ content_object = GenericForeignKey("content_type", "object_id")
class GenRelReference(models.Model):
@@ -1024,7 +1059,9 @@ class ParentWithUUIDPK(models.Model):
class RelatedWithUUIDPKModel(models.Model):
- parent = models.ForeignKey(ParentWithUUIDPK, on_delete=models.SET_NULL, null=True, blank=True)
+ parent = models.ForeignKey(
+ ParentWithUUIDPK, on_delete=models.SET_NULL, null=True, blank=True
+ )
class Author(models.Model):
@@ -1038,6 +1075,7 @@ class Authorship(models.Model):
class UserProxy(User):
"""Proxy a model with a different app_label."""
+
class Meta:
proxy = True
@@ -1054,5 +1092,9 @@ class Héllo(models.Model):
class Box(models.Model):
title = models.CharField(max_length=100)
- next_box = models.ForeignKey("self", null=True, on_delete=models.SET_NULL, blank=True)
- next_box = models.ForeignKey("self", null=True, on_delete=models.SET_NULL, blank=True)
+ next_box = models.ForeignKey(
+ "self", null=True, on_delete=models.SET_NULL, blank=True
+ )
+ next_box = models.ForeignKey(
+ "self", null=True, on_delete=models.SET_NULL, blank=True
+ )