wip supermarket categories

This commit is contained in:
vabene1111
2021-01-25 21:58:24 +01:00
parent 138a29770a
commit 09716f2b00
7 changed files with 100 additions and 13 deletions

View File

@ -5,7 +5,7 @@ from .models import (Comment, CookLog, Food, Ingredient, InviteLink, Keyword,
RecipeBook, RecipeBookEntry, RecipeImport, ShareLink,
ShoppingList, ShoppingListEntry, ShoppingListRecipe,
Space, Step, Storage, Sync, SyncLog, Unit, UserPreference,
ViewLog, Supermarket, SupermarketCategory)
ViewLog, Supermarket, SupermarketCategory, SupermarketCategoryRelation)
class SpaceAdmin(admin.ModelAdmin):
@ -42,7 +42,16 @@ class SyncAdmin(admin.ModelAdmin):
admin.site.register(Sync, SyncAdmin)
admin.site.register(Supermarket)
class SupermarketCategoryInline(admin.TabularInline):
model = SupermarketCategoryRelation
class SupermarketAdmin(admin.ModelAdmin):
inlines = (SupermarketCategoryInline,)
admin.site.register(Supermarket, SupermarketAdmin)
admin.site.register(SupermarketCategory)

View File

@ -0,0 +1,28 @@
# Generated by Django 3.1.5 on 2021-01-25 20:33
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('cookbook', '0103_food_ignore_shopping'),
]
operations = [
migrations.CreateModel(
name='SupermarketCategoryRelation',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('order', models.IntegerField(default=0)),
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cookbook.supermarketcategory')),
('supermarket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cookbook.supermarket')),
],
),
migrations.AddField(
model_name='supermarket',
name='categories',
field=models.ManyToManyField(through='cookbook.SupermarketCategoryRelation', to='cookbook.SupermarketCategory'),
),
]

View File

@ -144,14 +144,6 @@ class Sync(models.Model):
return self.path
class Supermarket(models.Model):
name = models.CharField(unique=True, max_length=128, validators=[MinLengthValidator(1)])
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class SupermarketCategory(models.Model):
name = models.CharField(unique=True, max_length=128, validators=[MinLengthValidator(1)])
description = models.TextField(blank=True, null=True)
@ -160,6 +152,21 @@ class SupermarketCategory(models.Model):
return self.name
class Supermarket(models.Model):
name = models.CharField(unique=True, max_length=128, validators=[MinLengthValidator(1)])
description = models.TextField(blank=True, null=True)
categories = models.ManyToManyField(SupermarketCategory, through='SupermarketCategoryRelation')
def __str__(self):
return self.name
class SupermarketCategoryRelation(models.Model):
supermarket = models.ForeignKey(Supermarket, on_delete=models.CASCADE)
category = models.ForeignKey(SupermarketCategory, on_delete=models.CASCADE)
order = models.IntegerField(default=0)
class SyncLog(models.Model):
sync = models.ForeignKey(Sync, on_delete=models.CASCADE)
status = models.CharField(max_length=32)

View File

@ -11,7 +11,7 @@ from cookbook.models import (Comment, CookLog, Food, Ingredient, Keyword,
RecipeBook, RecipeBookEntry, RecipeImport,
ShareLink, ShoppingList, ShoppingListEntry,
ShoppingListRecipe, Step, Storage, Sync, SyncLog,
Unit, UserPreference, ViewLog, SupermarketCategory)
Unit, UserPreference, ViewLog, SupermarketCategory, Supermarket, SupermarketCategoryRelation)
from cookbook.templatetags.custom_tags import markdown
@ -140,6 +140,20 @@ class UnitSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
read_only_fields = ('id',)
class SupermarketCategoryRelationSerializer(serializers.ModelSerializer):
class Meta:
model = SupermarketCategoryRelation
fields = "__all__"
class SupermarketSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
categories = SupermarketCategoryRelationSerializer(many=True, read_only=True)
class Meta:
model = Supermarket
fields = ('id', 'name', 'categories')
class SupermarketCategorySerializer(UniqueFieldsMixin, WritableNestedModelSerializer):
def create(self, validated_data):

View File

@ -201,6 +201,28 @@
</div>
</div>
<div class="row">
<div class="col" style="margin-top: 1vh">
{# <multiselect#}
{# v-tabindex#}
{# v-model="shopping_list.shared"#}
{# :options="users"#}
{# :close-on-select="true"#}
{# :clear-on-select="true"#}
{# :allow-empty="true"#}
{# :preserve-search="true"#}
{# placeholder="{% trans 'Select Supermarket' %}"#}
{# select-label="{% trans 'Select' %}"#}
{# label="supermarket"#}
{# track-by="id"#}
{# :multiple="false"#}
{# :loading="supermarket_loading"#}
{# @search-change="searchSupermarket">#}
{# </multiselect>#}
</div>
</div>
<div class="row">
<div class="col" style="margin-top: 1vh">
<multiselect

View File

@ -34,6 +34,7 @@ router.register(r'view-log', api.ViewLogViewSet)
router.register(r'cook-log', api.CookLogViewSet)
router.register(r'recipe-book', api.RecipeBookViewSet)
router.register(r'recipe-book-entry', api.RecipeBookEntryViewSet)
router.register(r'supermarket', api.SupermarketViewSet)
urlpatterns = [
path('', views.index, name='index'),

View File

@ -36,7 +36,7 @@ from cookbook.models import (CookLog, Food, Ingredient, Keyword, MealPlan,
MealType, Recipe, RecipeBook, ShoppingList,
ShoppingListEntry, ShoppingListRecipe, Step,
Storage, Sync, SyncLog, Unit, UserPreference,
ViewLog, RecipeBookEntry)
ViewLog, RecipeBookEntry, Supermarket)
from cookbook.provider.dropbox import Dropbox
from cookbook.provider.local import Local
from cookbook.provider.nextcloud import Nextcloud
@ -51,7 +51,7 @@ from cookbook.serializer import (FoodSerializer, IngredientSerializer,
StorageSerializer, SyncLogSerializer,
SyncSerializer, UnitSerializer,
UserNameSerializer, UserPreferenceSerializer,
ViewLogSerializer, CookLogSerializer, RecipeBookEntrySerializer, RecipeOverviewSerializer)
ViewLogSerializer, CookLogSerializer, RecipeBookEntrySerializer, RecipeOverviewSerializer, SupermarketSerializer)
from recipes.settings import DEMO
@ -141,6 +141,12 @@ class StandardFilterMixin(ViewSetMixin):
return queryset
class SupermarketViewSet(viewsets.ModelViewSet, StandardFilterMixin):
queryset = Supermarket.objects.all()
serializer_class = SupermarketSerializer
permission_classes = [CustomIsUser]
class KeywordViewSet(viewsets.ModelViewSet, StandardFilterMixin):
"""
list: