Skip to content

Commit

Permalink
Switch to horribly simple style model (#150)
Browse files Browse the repository at this point in the history
* Add new simplified style models

* embed new style in beer

* drop tap list provider style mapping model

* Update parsers to use new_style

* Update beer search to use new_style

* Drop all REST references to the old beer style models

* Drop beer style and category models

* Fix style name display

* Embed alternate names within the admin views

* Drop unused imports
  • Loading branch information
drewbrew authored and mjcarroll committed Apr 9, 2019
1 parent 1efdf0b commit 90eb0a1
Show file tree
Hide file tree
Showing 45 changed files with 303 additions and 1,414 deletions.
22 changes: 19 additions & 3 deletions beers/admin.py
Expand Up @@ -4,6 +4,10 @@
from . import models


class BeerAlternateNameInline(admin.TabularInline):
model = models.BeerAlternateName


class BeerAdmin(admin.ModelAdmin):

def merge_beers(self, request, queryset):
Expand Down Expand Up @@ -78,6 +82,11 @@ def merge_beers(self, request, queryset):
list_filter = ('name', 'manufacturer')
list_select_related = ('manufacturer', )
search_fields = ('name', 'manufacturer__name')
inlines = [BeerAlternateNameInline]


class ManufacturerAlternateNameInline(admin.TabularInline):
model = models.ManufacturerAlternateName


class ManufacturerAdmin(admin.ModelAdmin):
Expand Down Expand Up @@ -143,6 +152,7 @@ def merge_manufacturers(self, request, queryset):
f'{manufacturer}'
)

inlines = [ManufacturerAlternateNameInline]
merge_manufacturers.short_description = 'Merge manufacturers'
actions = ['merge_manufacturers']
list_display = ('name', 'id')
Expand All @@ -169,9 +179,15 @@ class BeerPriceAdmin(admin.ModelAdmin):
search_fields = ('beer__name', 'serving_size__name', )


admin.site.register(models.BeerStyleCategory)
admin.site.register(models.BeerStyleTag)
admin.site.register(models.BeerStyle)
class StyleAlternateNameInline(admin.TabularInline):
model = models.StyleAlternateName


class StyleAdmin(admin.ModelAdmin):
inlines = [StyleAlternateNameInline]


admin.site.register(models.Style, StyleAdmin)
admin.site.register(models.Manufacturer, ManufacturerAdmin)
admin.site.register(models.BeerPrice, BeerPriceAdmin)
admin.site.register(models.ServingSize)
Expand Down
12 changes: 7 additions & 5 deletions beers/filters.py
Expand Up @@ -19,8 +19,8 @@ class BeerFilterSet(FilterSet):

o = OrderingFilter(
fields=[
'name', 'abv', 'ibu', 'style__name', 'style__category__name',
'manufacturer__name',
'name', 'abv', 'ibu', 'style__name',
'style__alternate_names__name', 'manufacturer__name',
],
)

Expand All @@ -36,9 +36,11 @@ def filter_search(self, queryset, name, value):
) | Q(
manufacturer__name__icontains=value,
) | Q(
style__name__icontains=value,
# the field is case-insensitive, so no need for icontains
style__name=value,
) | Q(
style__category__name__icontains=value,
# the field is case-insensitive, so no need for icontains
style__alternate_names__name=value,
) | Q(
manufacturer__alternate_names__name__icontains=value,
),
Expand All @@ -55,7 +57,7 @@ class Meta:
'manufacturer__name': DEFAULT_NUMERIC_FILTER_OPERATORS,
'taps__venue__name': DEFAULT_STRING_FILTER_OPERATORS,
'style__name': DEFAULT_STRING_FILTER_OPERATORS,
'style__category__name': DEFAULT_STRING_FILTER_OPERATORS,
'style__alternate_names__name': DEFAULT_STRING_FILTER_OPERATORS,
'search': ['exact'],
'on_tap': ['exact'],
}
Expand Down
166 changes: 0 additions & 166 deletions beers/management/commands/importbjcp.py

This file was deleted.

35 changes: 35 additions & 0 deletions beers/migrations/0023_auto_20190408_2248.py
@@ -0,0 +1,35 @@
# Generated by Django 2.2 on 2019-04-08 22:48

import django.contrib.postgres.fields.citext
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('beers', '0022_merge_common_endings'),
]

operations = [
migrations.CreateModel(
name='Style',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', django.contrib.postgres.fields.citext.CITextField(unique=True)),
],
),
migrations.CreateModel(
name='StyleAlternateName',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', django.contrib.postgres.fields.citext.CITextField(unique=True)),
('style', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='alternate_names', to='beers.Style')),
],
),
migrations.AddField(
model_name='beer',
name='new_style',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='beers', to='beers.Style'),
),
]
53 changes: 53 additions & 0 deletions beers/migrations/0024_populate_styles.py
@@ -0,0 +1,53 @@
# Generated by Django 2.2 on 2019-04-08 22:45

from django.db import migrations
from django.db.models import Q


def populate_styles(apps, schema_editor):
beer_model = apps.get_model('beers.Beer')
style_model = apps.get_model('beers.Style')
beers = beer_model.objects.filter(
Q(style__isnull=False) | ~Q(api_vendor_style='')
).select_related('style')
style_names = {}
style_map = {}
for beer in beers:
if beer.api_vendor_style:
name = beer.api_vendor_style
else:
name = beer.style.name
ci_name = name.casefold()

try:
style = style_names[ci_name]
except KeyError:
style = style_model(name=name)
style_map[beer] = style
style_names[ci_name] = style
else:
style_map[beer] = style
style_model.objects.bulk_create(style_names.values())
for beer, style in style_map.items():
beer.new_style = style
beer.save()


def reverse(apps, schema_editor):
beer_model = apps.get_model('beers.Beer')
for beer in beer_model.objects.select_related('new_style').filter(
new_style__isnull=False,
):
beer.api_vendor_style = beer.new_style.name
beer.save()


class Migration(migrations.Migration):

dependencies = [
('beers', '0023_auto_20190408_2248'),
]

operations = [
migrations.RunPython(populate_styles, reverse),
]
30 changes: 30 additions & 0 deletions beers/migrations/0025_auto_20190409_0145.py
@@ -0,0 +1,30 @@
# Generated by Django 2.2 on 2019-04-09 01:45

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('beers', '0024_populate_styles'),
]

operations = [
migrations.AlterUniqueTogether(
name='beerstylecategory',
unique_together=None,
),
migrations.RemoveField(
model_name='beer',
name='style',
),
migrations.DeleteModel(
name='BeerStyle',
),
migrations.DeleteModel(
name='BeerStyleCategory',
),
migrations.DeleteModel(
name='BeerStyleTag',
),
]

0 comments on commit 90eb0a1

Please sign in to comment.