diff --git a/django/didgeridoo/webshop/admin.py b/django/didgeridoo/webshop/admin.py index bf5d110..4951054 100644 --- a/django/didgeridoo/webshop/admin.py +++ b/django/didgeridoo/webshop/admin.py @@ -5,7 +5,9 @@ from django.contrib.auth.models import User # Register your models here. from webshop.models import (Article, Order, OrderPosition, Person, City, Picture, OrderOfGoods, - Category, Option, Setting) + Category, Option) + +from webshop.forms import PictureForm class PersonInline(admin.StackedInline): @@ -14,12 +16,38 @@ class PersonInline(admin.StackedInline): verbose_name_plural = 'person' +class PictureAdmin(admin.ModelAdmin): + form = PictureForm + ordering = ('name',) + list_display = ('name', 'article',) + + class PictureInline(admin.StackedInline): model = Picture - can_delete = False + form = PictureForm verbose_name_plural = 'pictures' +class OptionAdmin(admin.ModelAdmin): + model = Option + list_display = ('name', 'description',) + readonly_fields = ('name','description',) + + + def get_actions(self, request): + #Disable delete + actions = super(OptionAdmin, self).get_actions(request) + del actions['delete_selected'] + return actions + + def has_delete_permission(self, request, obj=None): + #Disable delete + return False + + def has_add_permission(self, request): + return False + + class UserAdmin(BaseUserAdmin): inlines = (PersonInline,) @@ -54,8 +82,8 @@ admin.site.register(User, UserAdmin) admin.site.register(Article, ArticleAdmin) admin.site.register(Order, OrderAdmin) +admin.site.register(Picture, PictureAdmin) admin.site.register(City) admin.site.register(OrderOfGoods, OrderOfGoodsAdmin) admin.site.register(Category) -admin.site.register(Option) -admin.site.register(Setting) +admin.site.register(Option, OptionAdmin) diff --git a/django/didgeridoo/webshop/fixtures/webshop.yaml b/django/didgeridoo/webshop/fixtures/webshop.yaml index a3c429d..fd09a94 100644 --- a/django/didgeridoo/webshop/fixtures/webshop.yaml +++ b/django/didgeridoo/webshop/fixtures/webshop.yaml @@ -95,3 +95,10 @@ stock: 44 status: 3 price_in_chf: 41.4 + +- model: webshop.Option + fields: + name: max_pictures + description: "Maximum number of Pictures a user is allowed to upload." + value: 5 + enabled: True diff --git a/django/didgeridoo/webshop/forms.py b/django/didgeridoo/webshop/forms.py index c87ec6c..5e431a9 100644 --- a/django/didgeridoo/webshop/forms.py +++ b/django/didgeridoo/webshop/forms.py @@ -1,5 +1,5 @@ from django import forms -from webshop.models import Salutation, City +from webshop.models import Salutation, City, Picture, Article, Option class RegistrationForm(forms.Form): @@ -22,3 +22,32 @@ class RegistrationForm(forms.Form): raise forms.ValidationError( "The zip code and the city don't match.") return city + + +class PictureForm(forms.ModelForm): + def max_pictures(self): + try: + option = Option.objects.get(name='max_pictures') + if option.enabled: + return option.value + else: + return False + except: + return False + + def count_pictures(self, _article): + count = Picture.objects.filter(article=_article.id).count() + return count + + def clean(self): + article = self.cleaned_data.get('article') + print(self.max_pictures()) + if self.max_pictures(): + if (self.count_pictures(article) >= self.max_pictures()): + raise forms.ValidationError("Only " + str(self.max_pictures()) + + " pictures per article allowed.") + return self.cleaned_data + + class Meta: + model = Picture + fields = ['name', 'article', 'image'] diff --git a/django/didgeridoo/webshop/models.py b/django/didgeridoo/webshop/models.py index 3bb3442..a17e7dc 100644 --- a/django/didgeridoo/webshop/models.py +++ b/django/didgeridoo/webshop/models.py @@ -7,18 +7,12 @@ from django.utils import timezone class Option(models.Model): name = models.CharField(max_length=200, unique=True) + description = models.CharField(max_length=200, unique=True) value = models.IntegerField(default=5) - - def __str__(self): - return self.name - - -class Setting(models.Model): - option = models.ForeignKey(Option, on_delete=models.CASCADE) enabled = models.BooleanField(default=False) def __str__(self): - return str(self.option) + return self.name class ArticleStatus(models.Model): @@ -74,8 +68,8 @@ class OrderOfGoods(models.Model): class Picture(models.Model): - name = models.CharField(max_length=200, unique=True) - article = models.ForeignKey(Article, on_delete=models.CASCADE) + name = models.CharField(max_length=200) + article = models.ForeignKey(Article) image = models.ImageField(upload_to="images") def __str__(self):