mirror of https://github.com/django/django.git
102 lines
2.7 KiB
Python
102 lines
2.7 KiB
Python
from django.contrib.auth.models import User
|
|
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.db import models
|
|
|
|
|
|
class Book(models.Model):
|
|
title = models.CharField(max_length=50)
|
|
year = models.PositiveIntegerField(null=True, blank=True)
|
|
author = models.ForeignKey(
|
|
User,
|
|
models.SET_NULL,
|
|
verbose_name="Verbose Author",
|
|
related_name="books_authored",
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
contributors = models.ManyToManyField(
|
|
User,
|
|
verbose_name="Verbose Contributors",
|
|
related_name="books_contributed",
|
|
blank=True,
|
|
)
|
|
employee = models.ForeignKey(
|
|
"Employee",
|
|
models.SET_NULL,
|
|
verbose_name="Employee",
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
is_best_seller = models.BooleanField(default=0, null=True)
|
|
date_registered = models.DateField(null=True)
|
|
availability = models.BooleanField(
|
|
choices=(
|
|
(False, "Paid"),
|
|
(True, "Free"),
|
|
(None, "Obscure"),
|
|
),
|
|
null=True,
|
|
)
|
|
# This field name is intentionally 2 characters long (#16080).
|
|
no = models.IntegerField(verbose_name="number", blank=True, null=True)
|
|
CHOICES = [
|
|
("non-fiction", "Non-Fictional"),
|
|
("fiction", "Fictional"),
|
|
(None, "Not categorized"),
|
|
("", "We don't know"),
|
|
]
|
|
category = models.CharField(max_length=20, choices=CHOICES, blank=True, null=True)
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
|
|
class ImprovedBook(models.Model):
|
|
book = models.OneToOneField(Book, models.CASCADE)
|
|
|
|
|
|
class Department(models.Model):
|
|
code = models.CharField(max_length=4, unique=True)
|
|
description = models.CharField(max_length=50, blank=True, null=True)
|
|
|
|
def __str__(self):
|
|
return self.description
|
|
|
|
|
|
class Employee(models.Model):
|
|
department = models.ForeignKey(Department, models.CASCADE, to_field="code")
|
|
name = models.CharField(max_length=100)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class TaggedItem(models.Model):
|
|
tag = models.SlugField()
|
|
content_type = models.ForeignKey(
|
|
ContentType, models.CASCADE, related_name="tagged_items"
|
|
)
|
|
object_id = models.PositiveIntegerField()
|
|
content_object = GenericForeignKey("content_type", "object_id")
|
|
|
|
def __str__(self):
|
|
return self.tag
|
|
|
|
|
|
class Bookmark(models.Model):
|
|
url = models.URLField()
|
|
tags = GenericRelation(TaggedItem)
|
|
|
|
CHOICES = [
|
|
("a", "A"),
|
|
(None, "None"),
|
|
("", "-"),
|
|
]
|
|
none_or_null = models.CharField(
|
|
max_length=20, choices=CHOICES, blank=True, null=True
|
|
)
|
|
|
|
def __str__(self):
|
|
return self.url
|