12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154 |
- import datetime
- import tempfile
- 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.models import ContentType
- from django.core.exceptions import ValidationError
- from django.core.files.storage import FileSystemStorage
- from django.db import models
- from django.utils import timezone
- 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):
- return self.name
- @property
- def name_property(self):
- """
- A property that simply returns the name. Used to test #24461
- """
- return self.name
- 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="+"
- )
- def __str__(self):
- return self.title
- @admin.display(ordering="date", description="")
- def model_year(self):
- return self.date.year
- @admin.display(ordering="-date", description="")
- def model_year_reversed(self):
- return self.date.year
- @property
- @admin.display(ordering="date")
- def model_property_year(self):
- return self.date.year
- @property
- def model_month(self):
- return self.date.month
- @property
- @admin.display(description="Is from past?", boolean=True)
- def model_property_is_from_past(self):
- return self.date < timezone.now()
- 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
- class Promo(models.Model):
- 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)
- def __str__(self):
- return self.name
- class Chapter(models.Model):
- 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?"
- 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?")
- guest_author = models.ForeignKey(User, models.SET_NULL, blank=True, null=True)
- def __str__(self):
- 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?")
- 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()
- 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
- 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
- class Thing(models.Model):
- title = models.CharField(max_length=20)
- color = models.ForeignKey(Color, models.CASCADE, limit_choices_to={"warm": True})
- pub_date = models.DateField(blank=True, null=True)
- def __str__(self):
- return self.title
- 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
- class Inquisition(models.Model):
- expected = models.BooleanField(default=False)
- leader = models.ForeignKey(Actor, models.CASCADE)
- country = models.CharField(max_length=20)
- def __str__(self):
- return "by %s from %s" % (self.leader, self.country)
- class Sketch(models.Model):
- title = models.CharField(max_length=100)
- inquisition = models.ForeignKey(
- Inquisition,
- models.CASCADE,
- limit_choices_to={
- "leader__name": "Palin",
- "leader__age": 27,
- "expected": False,
- },
- )
- defendant0 = models.ForeignKey(
- Actor,
- models.CASCADE,
- 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",
- )
- def __str__(self):
- return self.title
- def today_callable_dict():
- return {"last_action__gte": datetime.datetime.today()}
- def today_callable_q():
- return models.Q(last_action__gte=datetime.datetime.today())
- class Character(models.Model):
- username = models.CharField(max_length=100)
- last_action = models.DateTimeField()
- def __str__(self):
- return self.username
- class StumpJoke(models.Model):
- variation = models.CharField(max_length=100)
- most_recently_fooled = models.ForeignKey(
- Character,
- models.CASCADE,
- limit_choices_to=today_callable_dict,
- related_name="+",
- )
- has_fooled_today = models.ManyToManyField(
- Character, limit_choices_to=today_callable_q, related_name="+"
- )
- def __str__(self):
- return self.variation
- class Fabric(models.Model):
- NG_CHOICES = (
- (
- "Textured",
- (
- ("x", "Horizontal"),
- ("y", "Vertical"),
- ),
- ),
- ("plain", "Smooth"),
- )
- surface = models.CharField(max_length=20, choices=NG_CHOICES)
- 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
- 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
- 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"
- 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"
- 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, models.CASCADE, primary_key=True, parent_link=True
- )
- released = models.BooleanField(default=False)
- class Parent(models.Model):
- name = models.CharField(max_length=128)
- def clean(self):
- if self.name == "_invalid":
- raise ValidationError("invalid")
- class Child(models.Model):
- parent = models.ForeignKey(Parent, models.CASCADE, editable=False)
- name = models.CharField(max_length=30, blank=True)
- def clean(self):
- 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"]
- def __str__(self):
- return self.name
- class Toy(models.Model):
- child = models.ForeignKey(PKChild, models.CASCADE)
- class EmptyModel(models.Model):
- def __str__(self):
- return "Primary key = %s" % self.id
- temp_storage = FileSystemStorage(tempfile.mkdtemp())
- 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, models.CASCADE, 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)
- def __str__(self):
- return self.iso
- class Meta:
- ordering = ("iso",)
- # a base class for Recommender and Recommendation
- class Title(models.Model):
- pass
- class TitleTranslation(models.Model):
- title = models.ForeignKey(Title, models.CASCADE)
- text = models.CharField(max_length=100)
- class Recommender(Title):
- pass
- class Recommendation(Title):
- the_recommender = models.ForeignKey(Recommender, models.CASCADE)
- class Collector(models.Model):
- name = models.CharField(max_length=100)
- class Widget(models.Model):
- owner = models.ForeignKey(Collector, models.CASCADE)
- name = models.CharField(max_length=100)
- class DooHickey(models.Model):
- code = models.CharField(max_length=10, primary_key=True)
- owner = models.ForeignKey(Collector, models.CASCADE)
- name = models.CharField(max_length=100)
- class Grommet(models.Model):
- code = models.AutoField(primary_key=True)
- owner = models.ForeignKey(Collector, models.CASCADE)
- name = models.CharField(max_length=100)
- class Whatsit(models.Model):
- index = models.IntegerField(primary_key=True)
- owner = models.ForeignKey(Collector, models.CASCADE)
- name = models.CharField(max_length=100)
- class Doodad(models.Model):
- name = models.CharField(max_length=100)
- class FancyDoodad(Doodad):
- owner = models.ForeignKey(Collector, models.CASCADE)
- expensive = models.BooleanField(default=True)
- class Category(models.Model):
- collector = models.ForeignKey(Collector, models.CASCADE)
- order = models.PositiveIntegerField()
- class Meta:
- ordering = ("order",)
- def __str__(self):
- return "%s:o%s" % (self.id, self.order)
- def link_posted_default():
- return datetime.date.today() - datetime.timedelta(days=7)
- class Link(models.Model):
- posted = models.DateField(default=link_posted_default)
- url = models.URLField()
- post = models.ForeignKey("Post", models.CASCADE)
- readonly_link_content = models.TextField()
- 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, models.CASCADE)
- 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 ŠĐĆŽćžšđ)"
- )
- readonly_content = models.TextField()
- posted = models.DateField(
- default=datetime.date.today,
- help_text="Some help text for the date (with Unicode ŠĐĆŽćžšđ)",
- )
- public = models.BooleanField(null=True, blank=True)
- def awesomeness_level(self):
- return "Very awesome."
- # Proxy model to test overridden fields attrs on Post model so as not to
- # interfere with other tests.
- class FieldOverridePost(Post):
- class Meta:
- proxy = True
- class Gadget(models.Model):
- name = models.CharField(max_length=100)
- def __str__(self):
- return self.name
- class Villain(models.Model):
- name = models.CharField(max_length=100)
- def __str__(self):
- return self.name
- class SuperVillain(Villain):
- pass
- 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, models.CASCADE)
- object_id = models.PositiveIntegerField()
- content_object = GenericForeignKey("content_type", "object_id")
- def __str__(self):
- return self.name
- 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")
- tags = GenericRelation(FunkyTag)
- def __str__(self):
- return self.name
- class PlotDetails(models.Model):
- details = models.CharField(max_length=100)
- plot = models.OneToOneField(Plot, models.CASCADE, null=True, blank=True)
- def __str__(self):
- return self.details
- class PlotProxy(Plot):
- class Meta:
- proxy = True
- class SecretHideout(models.Model):
- """Secret! Not registered with the admin!"""
- location = models.CharField(max_length=100)
- villain = models.ForeignKey(Villain, models.CASCADE)
- def __str__(self):
- return self.location
- class SuperSecretHideout(models.Model):
- """Secret! Not registered with the admin!"""
- location = models.CharField(max_length=100)
- supervillain = models.ForeignKey(SuperVillain, models.CASCADE)
- def __str__(self):
- return self.location
- class Bookmark(models.Model):
- name = models.CharField(max_length=60)
- tag = GenericRelation(FunkyTag, related_query_name="bookmark")
- def __str__(self):
- return self.name
- class CyclicOne(models.Model):
- name = models.CharField(max_length=25)
- two = models.ForeignKey("CyclicTwo", models.CASCADE)
- def __str__(self):
- return self.name
- class CyclicTwo(models.Model):
- name = models.CharField(max_length=25)
- one = models.ForeignKey(CyclicOne, models.CASCADE)
- def __str__(self):
- return self.name
- class Topping(models.Model):
- name = models.CharField(max_length=20)
- def __str__(self):
- return self.name
- class Pizza(models.Model):
- name = models.CharField(max_length=20)
- toppings = models.ManyToManyField("Topping", related_name="pizzas")
- # Pizza's ModelAdmin has readonly_fields = ['toppings'].
- # toppings is editable for this model's admin.
- class ReadablePizza(Pizza):
- class Meta:
- proxy = True
- # No default permissions are created for this model and both name and toppings
- # are readonly for this model's admin.
- class ReadOnlyPizza(Pizza):
- class Meta:
- proxy = True
- default_permissions = ()
- class Album(models.Model):
- owner = models.ForeignKey(User, models.SET_NULL, null=True, blank=True)
- title = models.CharField(max_length=30)
- class Song(models.Model):
- name = models.CharField(max_length=20)
- album = models.ForeignKey(Album, on_delete=models.RESTRICT)
- def __str__(self):
- return self.name
- class Employee(Person):
- code = models.CharField(max_length=20)
- class Meta:
- ordering = ["name"]
- class WorkHour(models.Model):
- datum = models.DateField()
- employee = models.ForeignKey(Employee, models.CASCADE)
- class Manager(Employee):
- """
- A multi-layer MTI child.
- """
- pass
- class Bonus(models.Model):
- recipient = models.ForeignKey(Manager, on_delete=models.CASCADE)
- class Question(models.Model):
- big_id = models.BigAutoField(primary_key=True)
- 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")
- uuid = models.UUIDField(default=uuid.uuid4, unique=True)
- def __str__(self):
- return self.question
- 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"),
- )
- related_answers = models.ManyToManyField("self")
- answer = models.CharField(max_length=20)
- def __str__(self):
- return self.answer
- class Answer2(Answer):
- class Meta:
- proxy = True
- class Reservation(models.Model):
- start_date = models.DateTimeField()
- price = models.IntegerField()
- class FoodDelivery(models.Model):
- DRIVER_CHOICES = (
- ("bill", "Bill G"),
- ("steve", "Steve J"),
- )
- RESTAURANT_CHOICES = (
- ("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
- )
- class Meta:
- unique_together = (("driver", "restaurant"),)
- 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)
- 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.BooleanField(null=True)
- 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)
- # `db_index=False` because MySQL cannot index large CharField (#21196).
- slug = models.SlugField(max_length=1000, db_index=False)
- 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)
- @admin.display(ordering="order")
- def some_order(self):
- return self.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)
- 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)
- slug3 = models.SlugField(blank=True, allow_unicode=True)
- 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)
- 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 ParentWithDependentChildren(models.Model):
- """
- Issue #20522
- 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)
- class DependentChild(models.Model):
- """
- Issue #20522
- 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)
- class _Manager(models.Manager):
- def get_queryset(self):
- return super().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."""
- class State(models.Model):
- 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")
- def get_absolute_url(self):
- return "/dummy/%s/" % self.pk
- class Restaurant(models.Model):
- city = models.ForeignKey(City, models.CASCADE)
- name = models.CharField(max_length=100)
- def get_absolute_url(self):
- return "/dummy/%s/" % self.pk
- class Worker(models.Model):
- work_at = models.ForeignKey(Restaurant, models.CASCADE)
- name = models.CharField(max_length=50)
- surname = models.CharField(max_length=50)
- # Models for #23329
- class ReferencedByParent(models.Model):
- name = models.CharField(max_length=20, unique=True)
- class ParentWithFK(models.Model):
- fk = models.ForeignKey(
- ReferencedByParent,
- models.CASCADE,
- to_field="name",
- related_name="hidden+",
- )
- class ChildOfReferer(ParentWithFK):
- pass
- # Models for #23431
- class InlineReferer(models.Model):
- pass
- class ReferencedByInline(models.Model):
- name = models.CharField(max_length=20, unique=True)
- class InlineReference(models.Model):
- referer = models.ForeignKey(InlineReferer, models.CASCADE)
- fk = models.ForeignKey(
- ReferencedByInline,
- models.CASCADE,
- to_field="name",
- related_name="hidden+",
- )
- class Recipe(models.Model):
- rname = models.CharField(max_length=20, unique=True)
- class Ingredient(models.Model):
- iname = models.CharField(max_length=20, unique=True)
- 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")
- # Model for #23839
- class NotReferenced(models.Model):
- # Don't point any FK at this model.
- pass
- # Models for #23934
- class ExplicitlyProvidedPK(models.Model):
- name = models.IntegerField(primary_key=True)
- class ImplicitlyGeneratedPK(models.Model):
- name = models.IntegerField(unique=True)
- # Models for #25622
- class ReferencedByGenRel(models.Model):
- content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
- object_id = models.PositiveIntegerField()
- content_object = GenericForeignKey("content_type", "object_id")
- class GenRelReference(models.Model):
- references = GenericRelation(ReferencedByGenRel)
- class ParentWithUUIDPK(models.Model):
- id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
- title = models.CharField(max_length=100)
- def __str__(self):
- return str(self.id)
- class RelatedWithUUIDPKModel(models.Model):
- parent = models.ForeignKey(
- ParentWithUUIDPK, on_delete=models.SET_NULL, null=True, blank=True
- )
- class Author(models.Model):
- pass
- class Authorship(models.Model):
- book = models.ForeignKey(Book, models.CASCADE)
- author = models.ForeignKey(Author, models.CASCADE)
- class UserProxy(User):
- """Proxy a model with a different app_label."""
- class Meta:
- proxy = True
- class ReadOnlyRelatedField(models.Model):
- chapter = models.ForeignKey(Chapter, models.CASCADE)
- language = models.ForeignKey(Language, models.CASCADE)
- user = models.ForeignKey(User, models.CASCADE)
- class Héllo(models.Model):
- pass
- 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
- )
- class Country(models.Model):
- NORTH_AMERICA = "North America"
- SOUTH_AMERICA = "South America"
- EUROPE = "Europe"
- ASIA = "Asia"
- OCEANIA = "Oceania"
- ANTARCTICA = "Antarctica"
- CONTINENT_CHOICES = [
- (NORTH_AMERICA, NORTH_AMERICA),
- (SOUTH_AMERICA, SOUTH_AMERICA),
- (EUROPE, EUROPE),
- (ASIA, ASIA),
- (OCEANIA, OCEANIA),
- (ANTARCTICA, ANTARCTICA),
- ]
- name = models.CharField(max_length=80)
- continent = models.CharField(max_length=13, choices=CONTINENT_CHOICES)
- def __str__(self):
- return self.name
- class Traveler(models.Model):
- born_country = models.ForeignKey(Country, models.CASCADE)
- living_country = models.ForeignKey(
- Country, models.CASCADE, related_name="living_country_set"
- )
- favorite_country_to_vacation = models.ForeignKey(
- Country,
- models.CASCADE,
- related_name="favorite_country_to_vacation_set",
- limit_choices_to={"continent": Country.ASIA},
- )
- class Square(models.Model):
- side = models.IntegerField()
- area = models.GeneratedField(
- db_persist=True,
- expression=models.F("side") * models.F("side"),
- output_field=models.BigIntegerField(),
- )
- class Meta:
- required_db_features = {"supports_stored_generated_columns"}
|