Browse Source

[beers] Finish out the model

Colin Powell 8 tháng trước cách đây
mục cha
commit
0ec7ed3a18

+ 8 - 6
vrobbler/apps/beers/admin.py

@@ -1,7 +1,5 @@
+from beers.models import Beer, BeerProducer, BeerStyle
 from django.contrib import admin
-
-from beers.models import Beer
-
 from scrobbles.admin import ScrobbleInline
 
 
@@ -10,10 +8,15 @@ class BeerInline(admin.TabularInline):
     extra = 0
 
 
-@admin.register(Beer)
+@admin.register(BeerStyle)
+class BeerStyle(admin.ModelAdmin):
+    date_hierarchy = "created"
+    search_fields = ("name",)
+
+
+@admin.register(BeerProducer)
 class BeerProducer(admin.ModelAdmin):
     date_hierarchy = "created"
-    list_display = ("uuid",)
     search_fields = ("name",)
 
 
@@ -23,7 +26,6 @@ class BeerAdmin(admin.ModelAdmin):
     list_display = (
         "uuid",
         "title",
-        "style",
     )
     ordering = ("-created",)
     search_fields = ("title",)

+ 75 - 0
vrobbler/apps/beers/migrations/0003_beerstyle_remove_beer_beeradvocate_image_and_more.py

@@ -0,0 +1,75 @@
+# Generated by Django 4.2.16 on 2024-10-22 21:47
+
+from django.db import migrations, models
+import django_extensions.db.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("beers", "0002_beer_beeradvocate_image_beer_producer_and_more"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="BeerStyle",
+            fields=[
+                (
+                    "id",
+                    models.BigAutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "created",
+                    django_extensions.db.fields.CreationDateTimeField(
+                        auto_now_add=True, verbose_name="created"
+                    ),
+                ),
+                (
+                    "modified",
+                    django_extensions.db.fields.ModificationDateTimeField(
+                        auto_now=True, verbose_name="modified"
+                    ),
+                ),
+                ("description", models.TextField(blank=True, null=True)),
+            ],
+            options={
+                "get_latest_by": "modified",
+                "abstract": False,
+            },
+        ),
+        migrations.RemoveField(
+            model_name="beer",
+            name="beeradvocate_image",
+        ),
+        migrations.RemoveField(
+            model_name="beer",
+            name="style",
+        ),
+        migrations.AddField(
+            model_name="beer",
+            name="untappd_image",
+            field=models.ImageField(
+                blank=True, null=True, upload_to="beers/untappd/"
+            ),
+        ),
+        migrations.AddField(
+            model_name="beer",
+            name="untappd_rating",
+            field=models.FloatField(blank=True, null=True),
+        ),
+        migrations.AddField(
+            model_name="beerproducer",
+            name="untappd_id",
+            field=models.CharField(blank=True, max_length=255, null=True),
+        ),
+        migrations.AddField(
+            model_name="beer",
+            name="styles",
+            field=models.ManyToManyField(to="beers.beerstyle"),
+        ),
+    ]

+ 5 - 1
vrobbler/apps/beers/models.py

@@ -10,6 +10,10 @@ from scrobbles.mixins import ScrobblableMixin
 BNULL = {"blank": True, "null": True}
 
 
+class BeerStyle(TimeStampedModel):
+    description = models.TextField(**BNULL)
+
+
 class BeerProducer(TimeStampedModel):
     description = models.TextField(**BNULL)
     location = models.CharField(max_length=255, **BNULL)
@@ -24,7 +28,7 @@ class Beer(ScrobblableMixin):
     description = models.TextField(**BNULL)
     ibu = models.SmallIntegerField(**BNULL)
     abv = models.FloatField(**BNULL)
-    style = models.CharField(max_length=100, **BNULL)
+    styles = models.ManyToManyField(BeerStyle)
     non_alcoholic = models.BooleanField(default=False)
     beeradvocate_id = models.CharField(max_length=255, **BNULL)
     beeradvocate_score = models.SmallIntegerField(**BNULL)