Procházet zdrojové kódy

[logdata] Janky fix to people and platform ids

Colin Powell před 5 dny
rodič
revize
b11d87af75

+ 9 - 5
vrobbler/apps/scrobbles/forms.py

@@ -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

+ 4 - 1
vrobbler/apps/scrobbles/views.py

@@ -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())

+ 1 - 21
vrobbler/apps/videogames/models.py

@@ -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)