Jarvis/jarvis/location/models.py

74 lines
2.4 KiB
Python

from django.db import models
class Country(models.Model):
"""Classe représentant les pays (basée sur la liste ISO 3166 de 2015).
References:
https://fr.wikipedia.org/wiki/ISO_3166
"""
class Meta:
verbose_name = "Country"
verbose_name_plural = "Countries"
name = models.CharField(max_length=255, verbose_name="English name")
nationality = models.CharField(max_length=255, verbose_name="Nationality")
iso2 = models.CharField(max_length=2)
iso3 = models.CharField(max_length=3)
isonum = models.PositiveSmallIntegerField()
def __str__(self):
return f"{self.name} ({self.iso2})"
class Place(models.Model):
"""
Représente un lieu. En plus de l'adresse, un lieu est spécifié par un nombre
de kilomètres et une durée de trajet. Pour faciliter les filtres, un lieu peut être
actif ou non.
"""
class Meta:
verbose_name = "Place"
verbose_name_plural = "Places"
name = models.CharField(max_length=255, verbose_name="Name")
address = models.CharField(max_length=255, verbose_name="Address")
postal = models.PositiveIntegerField(verbose_name="Postal code")
city = models.CharField(max_length=255, verbose_name="City")
country = models.ForeignKey(
Country, verbose_name="Country", on_delete=models.CASCADE, default=None
)
# nbkm = models.PositiveIntegerField(blank=True, null=True, help_text="in km")
# timing = models.PositiveIntegerField(blank=True, null=True, help_text="in minutes")
is_active = models.BooleanField(default=1, verbose_name="Active")
def __str__(self):
return f"{self.name} ({self.city})"
class Club(models.Model):
"""
Représente un club. Un club est associé à un lieu. Pour faciliter les filtres,
un club peut être actif ou non.
.. todo:: Un club peut avoir plusieurs salle
et une salle peut-être louée par plusieurs clubs... M2M ?
"""
class Meta:
verbose_name = "Club"
verbose_name_plural = "Clubs"
# place=models.ManyToManyField(Place, through="clubs")
place = models.ForeignKey(
Place, verbose_name="Place", on_delete=models.CASCADE, default=None
)
name = models.CharField(max_length=255, verbose_name="Name")
acronym = models.CharField(max_length=6, verbose_name="Acronym")
is_active = models.BooleanField(default=1, verbose_name="Active")
def __str__(self):
return f"{self.name} ({self.place.city})"