2013-02-19 02:07:28 +01:00
|
|
|
from __future__ import absolute_import
|
|
|
|
from __future__ import unicode_literals
|
2009-08-16 15:38:34 +02:00
|
|
|
|
2012-12-31 12:14:50 +01:00
|
|
|
from django import forms
|
2009-08-16 15:38:34 +02:00
|
|
|
from django.db import models
|
2013-10-18 11:55:26 +02:00
|
|
|
from django.utils.encoding import python_2_unicode_compatible
|
|
|
|
|
2009-08-16 15:38:34 +02:00
|
|
|
|
2015-05-13 12:36:12 +02:00
|
|
|
REGULAR = 0
|
|
|
|
MANAGER = 1
|
|
|
|
ADMIN = 2
|
|
|
|
|
2009-08-16 15:38:34 +02:00
|
|
|
STATUS_CHOICES = (
|
2015-05-13 12:36:12 +02:00
|
|
|
(REGULAR, 'Regular'),
|
|
|
|
(MANAGER, 'Manager'),
|
|
|
|
(ADMIN, 'Admin'),
|
2009-08-16 15:38:34 +02:00
|
|
|
)
|
|
|
|
|
2012-09-17 11:09:15 +02:00
|
|
|
|
2012-12-31 12:14:50 +01:00
|
|
|
# classes for testing filters with inherited fields
|
|
|
|
class SubCharField(models.CharField):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class SubSubCharField(SubCharField):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class SubnetMaskField(models.Field):
|
|
|
|
empty_strings_allowed = False
|
|
|
|
description = "Subnet Mask"
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
kwargs['max_length'] = 15
|
|
|
|
models.Field.__init__(self, *args, **kwargs)
|
|
|
|
|
|
|
|
def get_internal_type(self):
|
2015-11-23 08:56:23 +01:00
|
|
|
return "GenericIPAddressField"
|
2012-12-31 12:14:50 +01:00
|
|
|
|
|
|
|
def formfield(self, **kwargs):
|
2015-11-23 08:56:23 +01:00
|
|
|
defaults = {'form_class': forms.GenericIPAddressField}
|
2012-12-31 12:14:50 +01:00
|
|
|
defaults.update(kwargs)
|
|
|
|
return super(SubnetMaskField, self).formfield(**defaults)
|
|
|
|
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
@python_2_unicode_compatible
|
2009-08-16 15:38:34 +02:00
|
|
|
class User(models.Model):
|
|
|
|
username = models.CharField(max_length=255)
|
2012-12-31 12:14:50 +01:00
|
|
|
first_name = SubCharField(max_length=100)
|
|
|
|
last_name = SubSubCharField(max_length=100)
|
2009-08-16 15:38:34 +02:00
|
|
|
|
|
|
|
status = models.IntegerField(choices=STATUS_CHOICES, default=0)
|
|
|
|
|
2013-03-25 16:38:09 +01:00
|
|
|
is_active = models.BooleanField(default=False)
|
2009-08-16 15:38:34 +02:00
|
|
|
|
2013-02-19 02:07:28 +01:00
|
|
|
favorite_books = models.ManyToManyField('Book', related_name='lovers')
|
2009-08-16 15:38:34 +02:00
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
def __str__(self):
|
2009-08-16 15:38:34 +02:00
|
|
|
return self.username
|
|
|
|
|
2015-05-13 12:36:12 +02:00
|
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
|
class ManagerGroup(models.Model):
|
|
|
|
users = models.ManyToManyField(User,
|
|
|
|
limit_choices_to={'is_active': True},
|
|
|
|
related_name='member_of')
|
|
|
|
manager = models.ForeignKey(User,
|
|
|
|
limit_choices_to=lambda: {'status': MANAGER},
|
|
|
|
related_name='manager_of',
|
|
|
|
on_delete=models.CASCADE)
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.manager.name + ' group'
|
|
|
|
|
2012-09-17 11:09:15 +02:00
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
@python_2_unicode_compatible
|
2013-02-26 08:45:30 +01:00
|
|
|
class AdminUser(User):
|
|
|
|
class Meta:
|
|
|
|
proxy = True
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
def __str__(self):
|
2013-02-26 08:45:30 +01:00
|
|
|
return "%s (ADMIN)" % self.username
|
|
|
|
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
@python_2_unicode_compatible
|
2009-08-16 15:38:34 +02:00
|
|
|
class Comment(models.Model):
|
|
|
|
text = models.TextField()
|
2016-02-02 20:33:45 +01:00
|
|
|
author = models.ForeignKey(User, related_name='comments', on_delete=models.CASCADE)
|
2009-08-16 15:38:34 +02:00
|
|
|
|
|
|
|
date = models.DateField()
|
|
|
|
time = models.TimeField()
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
def __str__(self):
|
2009-08-16 15:38:34 +02:00
|
|
|
return "%s said %s" % (self.author, self.text[:25])
|
|
|
|
|
2009-10-17 03:42:57 +02:00
|
|
|
|
2009-08-16 15:38:34 +02:00
|
|
|
class Article(models.Model):
|
|
|
|
published = models.DateTimeField()
|
2016-02-02 20:33:45 +01:00
|
|
|
author = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
|
2009-10-17 03:42:57 +02:00
|
|
|
|
2014-11-18 20:34:12 +01:00
|
|
|
def __str__(self):
|
|
|
|
if self.author_id:
|
|
|
|
return "%s on %s" % (self.author, self.published)
|
|
|
|
return "Anonymous on %s" % self.published
|
|
|
|
|
2009-08-16 15:38:34 +02:00
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
@python_2_unicode_compatible
|
2009-08-16 15:38:34 +02:00
|
|
|
class Book(models.Model):
|
|
|
|
title = models.CharField(max_length=100)
|
|
|
|
price = models.DecimalField(max_digits=6, decimal_places=2)
|
|
|
|
average_rating = models.FloatField()
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
def __str__(self):
|
2009-08-16 15:38:34 +02:00
|
|
|
return self.title
|
|
|
|
|
2012-09-17 11:09:15 +02:00
|
|
|
|
2009-08-16 15:38:34 +02:00
|
|
|
class Place(models.Model):
|
|
|
|
name = models.CharField(max_length=100)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
abstract = True
|
|
|
|
|
2012-09-17 11:09:15 +02:00
|
|
|
|
2009-08-16 15:38:34 +02:00
|
|
|
class Restaurant(Place):
|
2014-07-27 11:32:47 +02:00
|
|
|
serves_pizza = models.BooleanField(default=False)
|
2012-12-31 12:14:50 +01:00
|
|
|
|
|
|
|
|
|
|
|
class NetworkSetting(models.Model):
|
2015-11-23 08:56:23 +01:00
|
|
|
ip = models.GenericIPAddressField()
|
2012-12-31 12:14:50 +01:00
|
|
|
mask = SubnetMaskField()
|
|
|
|
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
@python_2_unicode_compatible
|
2013-02-19 02:07:28 +01:00
|
|
|
class Company(models.Model):
|
|
|
|
name = models.CharField(max_length=100)
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
def __str__(self):
|
2013-02-19 02:07:28 +01:00
|
|
|
return self.name
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
ordering = ['name']
|
|
|
|
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
@python_2_unicode_compatible
|
2013-02-19 02:07:28 +01:00
|
|
|
class Location(models.Model):
|
2016-02-02 20:33:45 +01:00
|
|
|
company = models.ForeignKey(Company, related_name='locations', on_delete=models.CASCADE)
|
2013-02-19 02:07:28 +01:00
|
|
|
name = models.CharField(max_length=100)
|
|
|
|
zip_code = models.CharField(max_length=10)
|
|
|
|
open_days = models.CharField(max_length=7)
|
|
|
|
|
2013-10-18 11:55:26 +02:00
|
|
|
def __str__(self):
|
2013-02-19 02:07:28 +01:00
|
|
|
return '%s: %s' % (self.company.name, self.name)
|
|
|
|
|
2013-02-26 08:45:30 +01:00
|
|
|
|
|
|
|
class Account(models.Model):
|
|
|
|
name = models.CharField(max_length=100)
|
2014-07-27 11:32:47 +02:00
|
|
|
in_good_standing = models.BooleanField(default=False)
|
|
|
|
friendly = models.BooleanField(default=False)
|
2013-02-26 08:45:30 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Profile(models.Model):
|
2016-02-02 20:33:45 +01:00
|
|
|
account = models.OneToOneField(Account, related_name='profile', on_delete=models.CASCADE)
|
2014-07-27 11:32:47 +02:00
|
|
|
likes_coffee = models.BooleanField(default=False)
|
|
|
|
likes_tea = models.BooleanField(default=False)
|
2013-02-26 08:45:30 +01:00
|
|
|
|
|
|
|
|
|
|
|
class BankAccount(Account):
|
|
|
|
amount_saved = models.IntegerField(default=0)
|
|
|
|
|
2013-03-12 04:13:55 +01:00
|
|
|
|
|
|
|
class Node(models.Model):
|
|
|
|
name = models.CharField(max_length=20)
|
|
|
|
adjacents = models.ManyToManyField('self')
|
|
|
|
|
|
|
|
|
|
|
|
class DirectedNode(models.Model):
|
|
|
|
name = models.CharField(max_length=20)
|
|
|
|
outbound_nodes = models.ManyToManyField('self',
|
|
|
|
symmetrical=False,
|
|
|
|
related_name='inbound_nodes')
|
|
|
|
|
|
|
|
|
|
|
|
class Worker(models.Model):
|
|
|
|
name = models.CharField(max_length=100)
|
|
|
|
|
|
|
|
|
|
|
|
class HiredWorker(models.Model):
|
|
|
|
salary = models.IntegerField()
|
|
|
|
hired_on = models.DateField()
|
2016-02-02 20:33:45 +01:00
|
|
|
worker = models.ForeignKey(Worker, on_delete=models.CASCADE)
|
|
|
|
business = models.ForeignKey('Business', on_delete=models.CASCADE)
|
2013-03-12 04:13:55 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Business(models.Model):
|
|
|
|
name = models.CharField(max_length=100)
|
|
|
|
employees = models.ManyToManyField(Worker,
|
|
|
|
through=HiredWorker,
|
|
|
|
related_name='employers')
|
|
|
|
|
2015-09-09 23:14:57 +02:00
|
|
|
|
2015-11-23 08:11:30 +01:00
|
|
|
class UUIDTestModel(models.Model):
|
|
|
|
uuid = models.UUIDField()
|
2016-03-14 20:45:16 +01:00
|
|
|
|
|
|
|
|
|
|
|
class SpacewalkRecord(models.Model):
|
|
|
|
"""Cumulative space walk record.
|
|
|
|
|
|
|
|
See: https://en.wikipedia.org/wiki/List_of_cumulative_spacewalk_records
|
|
|
|
|
|
|
|
"""
|
|
|
|
astronaut = models.CharField(max_length=100)
|
|
|
|
duration = models.DurationField()
|