feat: add types for model fields

This commit is contained in:
relikd
2023-06-06 01:14:15 +02:00
parent 3756cad01f
commit 3761ffd6a9
10 changed files with 72 additions and 43 deletions

View File

@@ -1,12 +1,17 @@
from django.db import models
from app.base.forms.fields import CurrencyField
from app.base.models.person import Person
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from decimal import Decimal
from app.base.models.person import Person
class Account(models.Model):
user = models.OneToOneField(Person, on_delete=models.CASCADE)
balance = CurrencyField('Guthaben')
user: 'models.OneToOneField[Person]' = models.OneToOneField(
'Person', on_delete=models.CASCADE)
balance: 'models.DecimalField[Decimal]' = CurrencyField('Guthaben')
locked = models.BooleanField('Gesperrt', default=False)
class Meta:

View File

@@ -6,13 +6,11 @@ from django.urls import reverse
from app.base.forms.fields import DateTimeField, TextField
from app.base.forms.utils import datetime_now
from datetime import datetime
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from django.db.models import OuterRef
from app.base.models.person import Person
from app.base.models.booking_type import BookingType
from datetime import timedelta # noqa F401
from app.base.models import Person, BookingType
from datetime import datetime, timedelta # noqa F401
class Booking(models.Model):
@@ -20,9 +18,12 @@ class Booking(models.Model):
'BookingType', on_delete=models.PROTECT, verbose_name='Art')
user: 'models.ForeignKey[Person]' = models.ForeignKey(
'Person', on_delete=models.CASCADE, verbose_name='Nutzer:in')
begin_time = DateTimeField('Beginn', default=datetime_now)
end_time = DateTimeField('Ende', blank=True, null=True)
comment = TextField('Kommentar', blank=True)
begin_time: 'models.DateTimeField[datetime]' = DateTimeField(
'Beginn', default=datetime_now)
end_time: 'models.DateTimeField[datetime|None]' = DateTimeField(
'Ende', blank=True, null=True)
comment: 'models.TextField[str]' = TextField(
'Kommentar', blank=True)
class Meta:
verbose_name = 'Buchung'

View File

@@ -10,7 +10,7 @@ from typing import Iterable
class BookingType(models.Model):
key = models.CharField('UUID', primary_key=True, max_length=20)
label = models.CharField('Bezeichnung', max_length=200)
price = CurrencyField('Preis (€)')
price: 'models.DecimalField[Decimal]' = CurrencyField('Preis (€)')
interval = models.IntegerField('Intervall (Min)', default=60)
is_checkin = models.BooleanField('Ist Eincheck-Option', default=False)

View File

@@ -2,14 +2,20 @@ from django.db import models
from django.urls import reverse
from app.base.forms.fields import TextField
from app.base.models.course_visit import CourseVisit
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from app.base.models import CourseVisit
class Course(models.Model):
instructed: models.QuerySet[CourseVisit]
title = models.CharField('Titel', max_length=280)
mandatory = models.BooleanField('Braucht jeder?', default=False)
description = TextField('Beschreibung', blank=True)
description: 'models.TextField[str]' = TextField(
'Beschreibung', blank=True)
# related_name
instructed: 'models.QuerySet[CourseVisit]'
class Meta:
verbose_name = 'Einweisung'

View File

@@ -6,22 +6,22 @@ from app.base.forms.fields import DateField
from datetime import date
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from app.base.models.course import Course
from app.base.models.person import Person
from app.base.models import Course, Person
class CourseVisit(models.Model):
course: 'models.ForeignKey[Course]' = models.ForeignKey(
'Course', on_delete=models.CASCADE,
related_name='visits', verbose_name='Einweisung')
'Course', on_delete=models.CASCADE, related_name='visits',
verbose_name='Einweisung')
participant: 'models.ForeignKey[Person]' = models.ForeignKey(
'Person', on_delete=models.CASCADE,
related_name='courses', verbose_name='Wer wurde eingewiesen?')
'Person', on_delete=models.CASCADE, related_name='courses',
verbose_name='Wer wurde eingewiesen?')
teacher: 'models.ForeignKey[Person]|models.ForeignKey[None]' =\
models.ForeignKey(
'Person', on_delete=models.SET_NULL, blank=True, null=True,
related_name='instructed', verbose_name='Durchgeführt von')
date = DateField('Datum', default=date.today)
date: 'models.DateField[date]' = DateField(
'Datum', default=date.today)
class Meta:
verbose_name = 'Teilnahme'

View File

@@ -2,10 +2,15 @@ from django.db import models
from app.base.forms.fields import TextField
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from app.base.models import Person
class Note(models.Model):
user = models.OneToOneField('Person', on_delete=models.CASCADE)
text = TextField('Notiz', blank=True)
user: 'models.OneToOneField[Person]' = models.OneToOneField(
'Person', on_delete=models.CASCADE)
text: 'models.TextField[str]' = TextField('Notiz', blank=True)
class Meta:
verbose_name = 'Notiz'

View File

@@ -17,15 +17,16 @@ class Person(models.Model):
first_name = models.CharField('Vorname', max_length=200)
last_name = models.CharField('Nachname', max_length=200)
email = models.EmailField('Email', blank=True, null=True)
phone = models.CharField('Telefon', max_length=200, blank=True, null=True)
birth_date = DateField('Geburtsdatum')
zip_code = models.CharField('PLZ', max_length=10)
city = models.CharField('Stadt', max_length=200)
birth_date: 'models.DateField[date]' = DateField('Geburtsdatum')
street = models.CharField('Straße', max_length=200)
house_nr = models.CharField('Hausnummer', max_length=10)
zip_code = models.CharField('PLZ', max_length=10)
city = models.CharField('Stadt', max_length=200)
email = models.EmailField('Email', blank=True, null=True)
phone = models.CharField('Telefon', max_length=200, blank=True, null=True)
identified = models.BooleanField('Ausweis vorgezeigt', default=False)
identified = models.BooleanField(
'Ausweis vorgezeigt', default=False)
agreed_to_terms_of_service = models.BooleanField(
'Nutzungsbedingungen zugestimmt', default=False)

View File

@@ -6,7 +6,8 @@ from app.base.forms.fields import TextField
class Trait(models.Model):
key = models.CharField('UUID', primary_key=True, max_length=20)
label = models.CharField('Label', max_length=200)
description = TextField('Beschreibung', blank=True)
description: 'models.TextField[str]' = TextField(
'Beschreibung', blank=True)
class Meta:
verbose_name = 'Attribut'

View File

@@ -6,8 +6,7 @@ from app.base.forms.fields import DateField
from datetime import date
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from app.base.models.person import Person
from app.base.models.trait import Trait
from app.base.models import Person, Trait
class TraitMapping(models.Model):
@@ -16,8 +15,10 @@ class TraitMapping(models.Model):
verbose_name='Werkstattnutzer:in')
trait: 'models.ForeignKey[Trait]' = models.ForeignKey(
'Trait', on_delete=models.CASCADE, verbose_name='Attribut')
valid_from = DateField('Gültig von', default=date.today)
valid_until = DateField('Gültig bis', blank=True, null=True)
valid_from: 'models.DateField[date]' = DateField(
'Gültig von', default=date.today)
valid_until: 'models.DateField[date|None]' = DateField(
'Gültig bis', blank=True, null=True)
class Meta:
verbose_name = 'Attributzuweisung'

View File

@@ -3,18 +3,27 @@ from django.urls import reverse
from app.base.forms.fields import CurrencyField, DateTimeField
from app.base.forms.utils import datetime_now
from app.base.models.account import Account
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from datetime import datetime
from decimal import Decimal
from app.base.models import Account, Booking
class Transaction(models.Model):
account = models.ForeignKey(Account, on_delete=models.CASCADE,
verbose_name='Konto')
amount = CurrencyField('Betrag')
booking = models.OneToOneField('Booking', on_delete=models.CASCADE,
verbose_name='Zugehörige Zeitbuchung',
null=True, blank=True, default=None)
description = models.CharField('Beschreibung', max_length=500)
time_stamp = DateTimeField('Datum / Uhrzeit', editable=False)
account: 'models.ForeignKey[Account]' = models.ForeignKey(
'Account', on_delete=models.CASCADE, verbose_name='Konto')
amount: 'models.DecimalField[Decimal]' = CurrencyField(
'Betrag')
booking: 'models.OneToOneField[Booking]|models.OneToOneField[None]' = \
models.OneToOneField('Booking', on_delete=models.CASCADE,
verbose_name='Zugehörige Zeitbuchung',
blank=True, null=True, default=None)
description = models.CharField(
'Beschreibung', max_length=500)
time_stamp: 'models.DateTimeField[datetime]' = DateTimeField(
'Datum / Uhrzeit', editable=False)
class Meta:
verbose_name = 'Transaktion'