[logdata] Janky fix to people and platform ids

This commit is contained in:
2025-08-19 00:46:08 -04:00
parent 1cf50209a4
commit b11d87af75
3 changed files with 14 additions and 27 deletions

View File

@ -3,8 +3,6 @@ from typing import Union, get_args, get_origin
from django import forms
from people.models import Person
class ExportScrobbleForm(forms.Form):
"""Provide options for downloading scrobbles"""
@ -76,10 +74,16 @@ def django_form_field_from_type(field_type, required=True):
def form_from_dataclass(dataclass):
form_fields = {}
# Override notes field
override_fields = {}
for klass in dataclass.mro():
if hasattr(klass, "override_fields"):
print(klass, ": ", klass.override_fields())
override_fields.update(klass.override_fields())
print("overrides: ", override_fields)
for f in fields(dataclass):
if f.name in dataclass.override_fields():
form_fields[f.name] = dataclass.override_fields()[f.name]
print(f)
if f.name in override_fields:
form_fields[f.name] = override_fields[f.name]
continue
required = f.default is None and f.default_factory is None

View File

@ -969,11 +969,14 @@ class ScrobbleDetailView(DetailView):
original_value = (self.object.log or {}).get(field_name)
data[field_name] = original_value
if "with_people_ids" in data:
if data.get("with_people_ids", False):
data["with_people_ids"] = [
p.id for p in data["with_people_ids"]
]
if data.get("platform_id", False):
data["platform_id"] = data["platform_id"].id
self.object.log = data
self.object.save(update_fields=["log"])
return redirect(self.object.get_absolute_url())

View File

@ -39,20 +39,13 @@ class VideoGameLogData(BaseLogData, LongPlayLogData, WithPeopleLogData):
@classmethod
def override_fields(cls) -> dict:
fields = {}
for base in cls.mro()[1:]:
if hasattr(base, "override_fields"):
base_fields = base.override_fields()
fields.update(base_fields)
custom_fields = {
return {
"platform_id": forms.ModelChoiceField(
queryset=VideoGamePlatform.objects.all(),
required=False,
widget=forms.Select(),
)
}
fields.update(custom_fields)
return fields
class VideoGamePlatform(TimeStampedModel):
@ -70,19 +63,6 @@ class VideoGamePlatform(TimeStampedModel):
)
@dataclass
class VideoGameLogData(BaseLogData, LongPlayLogData, WithPeopleLogData):
platform_id: Optional[int] = None
emulated: Optional[bool] = False
emulator: Optional[str] = None
@property
def platform(self) -> VideoGamePlatform | None:
if not self.platform_id:
return
return VideoGamePlatform.objects.filter(id=self.platform_id).first()
class VideoGameCollection(TimeStampedModel):
name = models.CharField(max_length=255)
uuid = models.UUIDField(default=uuid4, editable=False, **BNULL)