django_records/examples/celestials/app/models.py

51 lines
2.0 KiB
Python

from django.db import models
from django_records.records import RecordManager
class Celestial(models.Model):
CELESTIAL_TYPES = ((0, 'Unknown'),
(1, 'Star'),
(2, 'Planet'),
(3, 'Planetoid'),
(4, 'Asteroid'),
(5, 'Station'))
orbits = models.ForeignKey('self', blank=True, null=True, related_name='orbitals', on_delete=models.CASCADE)
name = models.CharField(max_length=100)
celestial_type = models.IntegerField(choices=CELESTIAL_TYPES, default=int)
weight = models.FloatField(default=float)
size = models.FloatField(default=float)
objects = RecordManager()
@property
def is_moon(self):
return 5 > self.celestial_type > 1 and self.orbits and 5 > self.orbits.celestial_type > 1
class Spaceport(models.Model):
name = models.CharField(max_length=100)
celestial = models.ForeignKey(Celestial, related_name='spaceports', on_delete=models.CASCADE)
objects = RecordManager()
class Person(models.Model):
origin = models.ForeignKey(Celestial, related_name='children', blank=True, null=True, on_delete=models.CASCADE)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
age = models.IntegerField(blank=True, null=True)
objects = RecordManager()
class Visitor(models.Model):
person = models.ForeignKey(Person, related_name='as_visitor', on_delete=models.CASCADE)
spaceport = models.ForeignKey(Spaceport, related_name='visitors', on_delete=models.CASCADE)
luggage_weight = models.FloatField(blank=True, null=True, default=float)
objects = RecordManager()
class Citizen(models.Model):
planet = models.ForeignKey(Celestial, related_name='citizens', on_delete=models.CASCADE)
person = models.ForeignKey(Person, related_name='citizenships', on_delete=models.CASCADE)
clearance_level = models.IntegerField(blank=True, null=True)
objects = RecordManager()