diff --git a/cookbook/admin.py b/cookbook/admin.py index ed8cad2a..6e1cc8cf 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -94,7 +94,7 @@ admin.site.register(RecipeBookEntry, RecipeBookEntryAdmin) class MealPlanAdmin(admin.ModelAdmin): - list_display = ('user', 'recipe', 'meal', 'date') + list_display = ('user', 'recipe', 'meal_type', 'date') @staticmethod def user(obj): @@ -102,3 +102,10 @@ class MealPlanAdmin(admin.ModelAdmin): admin.site.register(MealPlan, MealPlanAdmin) + + +class MealTypeAdmin(admin.ModelAdmin): + list_display = ('name', 'order') + + +admin.site.register(MealType, MealTypeAdmin) diff --git a/cookbook/forms.py b/cookbook/forms.py index 22ef33ef..8dd240cb 100644 --- a/cookbook/forms.py +++ b/cookbook/forms.py @@ -263,7 +263,7 @@ class MealPlanForm(forms.ModelForm): class Meta: model = MealPlan - fields = ('recipe', 'title', 'meal', 'note', 'date', 'shared') + fields = ('recipe', 'title', 'meal_type', 'note', 'date', 'shared') help_texts = { 'shared': _('You can list default users to share recipes with in the settings.'), diff --git a/cookbook/migrations/0046_auto_20200602_1133.py b/cookbook/migrations/0046_auto_20200602_1133.py new file mode 100644 index 00000000..42011e3f --- /dev/null +++ b/cookbook/migrations/0046_auto_20200602_1133.py @@ -0,0 +1,27 @@ +# Generated by Django 3.0.5 on 2020-06-02 09:33 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0045_userpreference_show_recent'), + ] + + operations = [ + migrations.CreateModel( + name='MealType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=128)), + ('order', models.IntegerField(default=0)), + ], + ), + migrations.AddField( + model_name='mealplan', + name='meal_type', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='cookbook.MealType'), + ), + ] diff --git a/cookbook/migrations/0047_auto_20200602_1133.py b/cookbook/migrations/0047_auto_20200602_1133.py new file mode 100644 index 00000000..cc500a26 --- /dev/null +++ b/cookbook/migrations/0047_auto_20200602_1133.py @@ -0,0 +1,51 @@ +# Generated by Django 3.0.5 on 2020-06-02 09:33 + +from django.db import migrations +from django.utils.translation import gettext as _ + + +def migrate_meal_types(apps, schema_editor): + MealPlan = apps.get_model('cookbook', 'MealPlan') + MealType = apps.get_model('cookbook', 'MealType') + + breakfast = MealType.objects.create( + name=_('Breakfast'), + order=0, + ) + + lunch = MealType.objects.create( + name=_('Lunch'), + order=0, + ) + + dinner = MealType.objects.create( + name=_('Dinner'), + order=0, + ) + + other = MealType.objects.create( + name=_('Other'), + order=0, + ) + + for m in MealPlan.objects.all(): + if m.meal == 'BREAKFAST': + m.meal_type = breakfast + if m.meal == 'LUNCH': + m.meal_type = lunch + if m.meal == 'DINNER': + m.meal_type = dinner + if m.meal == 'OTHER': + m.meal_type = other + + m.save() + + +class Migration(migrations.Migration): + dependencies = [ + ('cookbook', '0046_auto_20200602_1133'), + ] + + operations = [ + migrations.RunPython(migrate_meal_types), + ] diff --git a/cookbook/migrations/0048_auto_20200602_1140.py b/cookbook/migrations/0048_auto_20200602_1140.py new file mode 100644 index 00000000..518a89f5 --- /dev/null +++ b/cookbook/migrations/0048_auto_20200602_1140.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.5 on 2020-06-02 09:40 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0047_auto_20200602_1133'), + ] + + operations = [ + migrations.RemoveField( + model_name='mealplan', + name='meal', + ), + migrations.AlterField( + model_name='mealplan', + name='meal_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cookbook.MealType'), + ), + ] diff --git a/cookbook/models.py b/cookbook/models.py index df41295b..f824a5ba 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -211,18 +211,20 @@ class RecipeBookEntry(models.Model): return self.recipe.name -class MealPlan(models.Model): - BREAKFAST = 'BREAKFAST' - LUNCH = 'LUNCH' - DINNER = 'DINNER' - OTHER = 'OTHER' - MEAL_TYPES = ((BREAKFAST, _('Breakfast')), (LUNCH, _('Lunch')), (DINNER, _('Dinner')), (OTHER, _('Other')),) +class MealType(models.Model): + name = models.CharField(max_length=128) + order = models.IntegerField(default=0) + def __str__(self): + return self.name + + +class MealPlan(models.Model): recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, blank=True, null=True) title = models.CharField(max_length=64, blank=True, default='') created_by = models.ForeignKey(User, on_delete=models.CASCADE) shared = models.ManyToManyField(User, blank=True, related_name='plan_share') - meal = models.CharField(choices=MEAL_TYPES, max_length=128, default=BREAKFAST) + meal_type = models.ForeignKey(MealType, on_delete=models.CASCADE) note = models.TextField(blank=True) date = models.DateField() @@ -232,8 +234,7 @@ class MealPlan(models.Model): return str(self.recipe) def get_meal_name(self): - meals = dict(self.MEAL_TYPES) - return meals.get(self.meal) + return self.meal_type.name class CookLog(models.Model): diff --git a/cookbook/templates/meal_plan_entry.html b/cookbook/templates/meal_plan_entry.html index 1068510f..04d9affb 100644 --- a/cookbook/templates/meal_plan_entry.html +++ b/cookbook/templates/meal_plan_entry.html @@ -12,7 +12,7 @@ {% block content %}
-

{{ plan.get_meal_name }} {{ plan.date }} {{ plan.meal_type }} {{ plan.date }}

{% trans 'Created by' %} {{ plan.created_by.get_user_name }} @@ -77,7 +77,7 @@ {% endif %} diff --git a/cookbook/views/new.py b/cookbook/views/new.py index e7178b0f..fd937251 100644 --- a/cookbook/views/new.py +++ b/cookbook/views/new.py @@ -127,7 +127,7 @@ class MealPlanCreate(GroupRequiredMixin, CreateView): def get_initial(self): return dict( - meal=self.request.GET['meal'] if 'meal' in self.request.GET else None, + meal_type=self.request.GET['meal'] if 'meal' in self.request.GET else None, date=datetime.strptime(self.request.GET['date'], '%Y-%m-%d') if 'date' in self.request.GET else None, shared=self.request.user.userpreference.plan_share.all() if self.request.user.userpreference.plan_share else None ) diff --git a/cookbook/views/views.py b/cookbook/views/views.py index e66b9d8d..b4203da8 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -148,13 +148,13 @@ def meal_plan(request): days_dict[d] = [] plan = {} - for t in MealPlan.MEAL_TYPES: - plan[t[0]] = {'type_name': t[1], 'days': copy.deepcopy(days_dict)} + for t in MealType.objects.all(): + plan[t.name] = {'type_name': t.name, 'days': copy.deepcopy(days_dict)} for d in days: plan_day = MealPlan.objects.filter(date=d).filter(Q(created_by=request.user) | Q(shared=request.user)).distinct().all() for p in plan_day: - plan[p.meal]['days'][d].append(p) + plan[str(p.meal_type)]['days'][d].append(p) return render(request, 'meal_plan.html', {'js_week': js_week, 'plan': plan, 'days': days, 'surrounding_weeks': surrounding_weeks}) @@ -167,7 +167,7 @@ def meal_plan_entry(request, pk): messages.add_message(request, messages.ERROR, _('You do not have the required permissions to view this page!')) return HttpResponseRedirect(reverse_lazy('index')) - same_day_plan = MealPlan.objects.filter(date=plan.date).exclude(pk=plan.pk).filter(Q(created_by=request.user) | Q(shared=request.user)).order_by('meal').all() + same_day_plan = MealPlan.objects.filter(date=plan.date).exclude(pk=plan.pk).filter(Q(created_by=request.user) | Q(shared=request.user)).order_by('meal_type').all() return render(request, 'meal_plan_entry.html', {'plan': plan, 'same_day_plan': same_day_plan})