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 django.db import models
from app.base.forms.fields import CurrencyField 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): class Account(models.Model):
user = models.OneToOneField(Person, on_delete=models.CASCADE) user: 'models.OneToOneField[Person]' = models.OneToOneField(
balance = CurrencyField('Guthaben') 'Person', on_delete=models.CASCADE)
balance: 'models.DecimalField[Decimal]' = CurrencyField('Guthaben')
locked = models.BooleanField('Gesperrt', default=False) locked = models.BooleanField('Gesperrt', default=False)
class Meta: 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.fields import DateTimeField, TextField
from app.base.forms.utils import datetime_now from app.base.forms.utils import datetime_now
from datetime import datetime
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
if TYPE_CHECKING: if TYPE_CHECKING:
from django.db.models import OuterRef from django.db.models import OuterRef
from app.base.models.person import Person from app.base.models import Person, BookingType
from app.base.models.booking_type import BookingType from datetime import datetime, timedelta # noqa F401
from datetime import timedelta # noqa F401
class Booking(models.Model): class Booking(models.Model):
@@ -20,9 +18,12 @@ class Booking(models.Model):
'BookingType', on_delete=models.PROTECT, verbose_name='Art') 'BookingType', on_delete=models.PROTECT, verbose_name='Art')
user: 'models.ForeignKey[Person]' = models.ForeignKey( user: 'models.ForeignKey[Person]' = models.ForeignKey(
'Person', on_delete=models.CASCADE, verbose_name='Nutzer:in') 'Person', on_delete=models.CASCADE, verbose_name='Nutzer:in')
begin_time = DateTimeField('Beginn', default=datetime_now) begin_time: 'models.DateTimeField[datetime]' = DateTimeField(
end_time = DateTimeField('Ende', blank=True, null=True) 'Beginn', default=datetime_now)
comment = TextField('Kommentar', blank=True) end_time: 'models.DateTimeField[datetime|None]' = DateTimeField(
'Ende', blank=True, null=True)
comment: 'models.TextField[str]' = TextField(
'Kommentar', blank=True)
class Meta: class Meta:
verbose_name = 'Buchung' verbose_name = 'Buchung'

View File

@@ -10,7 +10,7 @@ from typing import Iterable
class BookingType(models.Model): class BookingType(models.Model):
key = models.CharField('UUID', primary_key=True, max_length=20) key = models.CharField('UUID', primary_key=True, max_length=20)
label = models.CharField('Bezeichnung', max_length=200) label = models.CharField('Bezeichnung', max_length=200)
price = CurrencyField('Preis (€)') price: 'models.DecimalField[Decimal]' = CurrencyField('Preis (€)')
interval = models.IntegerField('Intervall (Min)', default=60) interval = models.IntegerField('Intervall (Min)', default=60)
is_checkin = models.BooleanField('Ist Eincheck-Option', default=False) 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 django.urls import reverse
from app.base.forms.fields import TextField 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): class Course(models.Model):
instructed: models.QuerySet[CourseVisit]
title = models.CharField('Titel', max_length=280) title = models.CharField('Titel', max_length=280)
mandatory = models.BooleanField('Braucht jeder?', default=False) 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: class Meta:
verbose_name = 'Einweisung' verbose_name = 'Einweisung'

View File

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

View File

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

View File

@@ -17,15 +17,16 @@ class Person(models.Model):
first_name = models.CharField('Vorname', max_length=200) first_name = models.CharField('Vorname', max_length=200)
last_name = models.CharField('Nachname', max_length=200) last_name = models.CharField('Nachname', max_length=200)
email = models.EmailField('Email', blank=True, null=True) birth_date: 'models.DateField[date]' = DateField('Geburtsdatum')
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)
street = models.CharField('Straße', max_length=200) street = models.CharField('Straße', max_length=200)
house_nr = models.CharField('Hausnummer', max_length=10) 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( agreed_to_terms_of_service = models.BooleanField(
'Nutzungsbedingungen zugestimmt', default=False) 'Nutzungsbedingungen zugestimmt', default=False)

View File

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

View File

@@ -6,8 +6,7 @@ from app.base.forms.fields import DateField
from datetime import date from datetime import date
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
if TYPE_CHECKING: if TYPE_CHECKING:
from app.base.models.person import Person from app.base.models import Person, Trait
from app.base.models.trait import Trait
class TraitMapping(models.Model): class TraitMapping(models.Model):
@@ -16,8 +15,10 @@ class TraitMapping(models.Model):
verbose_name='Werkstattnutzer:in') verbose_name='Werkstattnutzer:in')
trait: 'models.ForeignKey[Trait]' = models.ForeignKey( trait: 'models.ForeignKey[Trait]' = models.ForeignKey(
'Trait', on_delete=models.CASCADE, verbose_name='Attribut') 'Trait', on_delete=models.CASCADE, verbose_name='Attribut')
valid_from = DateField('Gültig von', default=date.today) valid_from: 'models.DateField[date]' = DateField(
valid_until = DateField('Gültig bis', blank=True, null=True) 'Gültig von', default=date.today)
valid_until: 'models.DateField[date|None]' = DateField(
'Gültig bis', blank=True, null=True)
class Meta: class Meta:
verbose_name = 'Attributzuweisung' 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.fields import CurrencyField, DateTimeField
from app.base.forms.utils import datetime_now 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): class Transaction(models.Model):
account = models.ForeignKey(Account, on_delete=models.CASCADE, account: 'models.ForeignKey[Account]' = models.ForeignKey(
verbose_name='Konto') 'Account', on_delete=models.CASCADE, verbose_name='Konto')
amount = CurrencyField('Betrag') amount: 'models.DecimalField[Decimal]' = CurrencyField(
booking = models.OneToOneField('Booking', on_delete=models.CASCADE, 'Betrag')
booking: 'models.OneToOneField[Booking]|models.OneToOneField[None]' = \
models.OneToOneField('Booking', on_delete=models.CASCADE,
verbose_name='Zugehörige Zeitbuchung', verbose_name='Zugehörige Zeitbuchung',
null=True, blank=True, default=None) blank=True, null=True, default=None)
description = models.CharField('Beschreibung', max_length=500) description = models.CharField(
time_stamp = DateTimeField('Datum / Uhrzeit', editable=False) 'Beschreibung', max_length=500)
time_stamp: 'models.DateTimeField[datetime]' = DateTimeField(
'Datum / Uhrzeit', editable=False)
class Meta: class Meta:
verbose_name = 'Transaktion' verbose_name = 'Transaktion'