import reversion from imagekit.models import ImageSpecField, ProcessedImageField from imagekit.processors import ResizeToFit, Transpose from django.db import models from django.utils import timezone from django.conf import settings from django_countries.fields import CountryField from mamweb.models.base import SeminarModelBase @reversion.register(ignore_duplicates=True) class Osoba(SeminarModelBase): class Meta: db_table = 'seminar_osoby' verbose_name = 'Osoba' verbose_name_plural = 'Osoby' ordering = ['prijmeni', 'jmeno'] id = models.AutoField(primary_key=True) jmeno = models.CharField('jméno', max_length=256) prijmeni = models.CharField('příjmení', max_length=256) prezdivka = models.CharField( 'přezdívka', blank=True, null=True, max_length=256 ) # User, pokud má na webu účet user = models.OneToOneField( settings.AUTH_USER_MODEL, blank=True, null=True, verbose_name='uživatel', on_delete=models.DO_NOTHING, ) # Pohlaví. Že ho neznáme se snad nestane (a ušetří to práci při programování) pohlavi_muz = models.BooleanField('pohlaví (muž)', default=False) email = models.EmailField('e-mail', max_length=256, blank=True, default='') telefon = models.CharField('telefon', max_length=256, blank=True, default='') datum_narozeni = models.DateField('datum narození', blank=True, null=True) # NULL dokud nedali souhlas datum_souhlasu_udaje = models.DateField( 'datum souhlasu (údaje)', blank=True, null=True, help_text='Datum souhlasu se zpracováním osobních údajů', ) # NULL dokud nedali souhlas datum_souhlasu_zasilani = models.DateField( 'datum souhlasu (spam)', blank=True, null=True, help_text='Datum souhlasu se zasíláním MFF materiálů', ) # Alespoň odhad (rok či i měsíc) datum_registrace = models.DateField( 'datum registrace do semináře', default=timezone.now, ) # Ulice může být i jen číslo ulice = models.CharField('ulice', max_length=256, blank=True, default='') mesto = models.CharField('město', max_length=256, blank=True, default='') psc = models.CharField('PSČ', max_length=32, blank=True, default='') # ISO 3166-1 dvojznakovy kod zeme velkym pismem (CZ, SK) # Ekvivalentní s CharField(max_length=2, default='CZ', ...) stat = CountryField( 'stát', default='CZ', help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)', ) jak_se_dozvedeli = models.TextField('Jak se dozvěděli', blank=True) poznamka = models.TextField( 'neveřejná poznámka', blank=True, help_text='Neveřejná poznámka k osobě (plain text)', ) foto = ProcessedImageField( verbose_name='Fotografie osoby', upload_to='image_osoby/velke/%Y/', null=True, blank=True, help_text='Vlož fotografii osoby o libovolné velikosti', processors=[ Transpose(Transpose.AUTO), ResizeToFit(500, 500, upscale=False), ], options={'quality': 95} ) foto_male = ImageSpecField( source='foto', processors=[ResizeToFit(200, 200, upscale=False)], options={'quality': 95}, ) # má OneToOneField nejvýše s: # Resitel # Prijemce # Organizator def plne_jmeno(self): return '{} {}'.format(self.jmeno, self.prijmeni) def inicial_krestni(self): jmena = self.jmeno.split() return " ".join(['{}.'.format(jmeno[0]) for jmeno in jmena]) def __str__(self): return self.plne_jmeno() # Overridujeme save Osoby, aby když si změní e-mail, aby se projevil i v # Userovi (a tak se dal poslat mail s resetem hesla) def save(self, *args, **kwargs): if self.user is not None: u = self.user # U svatého tučňáka, prosím ať tohle funguje. # (Takhle se kódit asi nemá...) u.email = self.email u.save() super().save()