96 lines
2.7 KiB
Python
96 lines
2.7 KiB
Python
from django import forms
|
|
|
|
from games.models import Game, Platform, Purchase, Session, Edition, Device
|
|
|
|
custom_date_widget = forms.DateInput(attrs={"type": "date"})
|
|
custom_datetime_widget = forms.DateTimeInput(
|
|
attrs={"type": "datetime-local"}, format="%Y-%m-%d %H:%M"
|
|
)
|
|
autofocus_select_widget = forms.Select(attrs={"autofocus": "autofocus"})
|
|
autofocus_input_widget = forms.TextInput(attrs={"autofocus": "autofocus"})
|
|
|
|
|
|
class SessionForm(forms.ModelForm):
|
|
# purchase = forms.ModelChoiceField(
|
|
# queryset=Purchase.objects.filter(date_refunded=None).order_by("edition__name")
|
|
# )
|
|
purchase = forms.ModelChoiceField(
|
|
queryset=Purchase.objects.order_by("edition__name"),
|
|
widget=autofocus_select_widget,
|
|
)
|
|
|
|
class Meta:
|
|
widgets = {
|
|
"timestamp_start": custom_datetime_widget,
|
|
"timestamp_end": custom_datetime_widget,
|
|
}
|
|
model = Session
|
|
fields = [
|
|
"purchase",
|
|
"timestamp_start",
|
|
"timestamp_end",
|
|
"duration_manual",
|
|
"device",
|
|
"note",
|
|
]
|
|
|
|
|
|
class EditionChoiceField(forms.ModelChoiceField):
|
|
def label_from_instance(self, obj) -> str:
|
|
return f"{obj.name} ({obj.platform}, {obj.year_released})"
|
|
|
|
|
|
class PurchaseForm(forms.ModelForm):
|
|
edition = EditionChoiceField(
|
|
queryset=Edition.objects.order_by("name"), widget=autofocus_select_widget
|
|
)
|
|
platform = forms.ModelChoiceField(queryset=Platform.objects.order_by("name"))
|
|
|
|
class Meta:
|
|
widgets = {
|
|
"date_purchased": custom_date_widget,
|
|
"date_refunded": custom_date_widget,
|
|
}
|
|
model = Purchase
|
|
fields = [
|
|
"edition",
|
|
"platform",
|
|
"date_purchased",
|
|
"date_refunded",
|
|
"price",
|
|
"price_currency",
|
|
"ownership_type",
|
|
]
|
|
|
|
|
|
class EditionForm(forms.ModelForm):
|
|
game = forms.ModelChoiceField(
|
|
queryset=Game.objects.order_by("name"), widget=autofocus_select_widget
|
|
)
|
|
platform = forms.ModelChoiceField(queryset=Platform.objects.order_by("name"))
|
|
|
|
class Meta:
|
|
model = Edition
|
|
fields = ["game", "name", "platform", "year_released", "wikidata"]
|
|
|
|
|
|
class GameForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Game
|
|
fields = ["name", "wikidata"]
|
|
widgets = {"name": autofocus_input_widget}
|
|
|
|
|
|
class PlatformForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Platform
|
|
fields = ["name", "group"]
|
|
widgets = {"name": autofocus_input_widget}
|
|
|
|
|
|
class DeviceForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Device
|
|
fields = ["name", "type"]
|
|
widgets = {"name": autofocus_input_widget}
|