Merge branch 'master' into production

This commit is contained in:
Andreas Zweili 2018-01-14 12:28:48 +01:00
commit 75dac7d385
4 changed files with 73 additions and 15 deletions

View File

@ -5,7 +5,9 @@ from django.contrib.auth.models import User
# Register your models here. # Register your models here.
from webshop.models import (Article, Order, OrderPosition, from webshop.models import (Article, Order, OrderPosition,
Person, City, Picture, OrderOfGoods, Person, City, Picture, OrderOfGoods,
Category, Option, Setting) Category, Option)
from webshop.forms import PictureForm
class PersonInline(admin.StackedInline): class PersonInline(admin.StackedInline):
@ -14,12 +16,38 @@ class PersonInline(admin.StackedInline):
verbose_name_plural = 'person' verbose_name_plural = 'person'
class PictureAdmin(admin.ModelAdmin):
form = PictureForm
ordering = ('name',)
list_display = ('name', 'article',)
class PictureInline(admin.StackedInline): class PictureInline(admin.StackedInline):
model = Picture model = Picture
can_delete = False form = PictureForm
verbose_name_plural = 'pictures' 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): class UserAdmin(BaseUserAdmin):
inlines = (PersonInline,) inlines = (PersonInline,)
@ -54,8 +82,8 @@ admin.site.register(User, UserAdmin)
admin.site.register(Article, ArticleAdmin) admin.site.register(Article, ArticleAdmin)
admin.site.register(Order, OrderAdmin) admin.site.register(Order, OrderAdmin)
admin.site.register(Picture, PictureAdmin)
admin.site.register(City) admin.site.register(City)
admin.site.register(OrderOfGoods, OrderOfGoodsAdmin) admin.site.register(OrderOfGoods, OrderOfGoodsAdmin)
admin.site.register(Category) admin.site.register(Category)
admin.site.register(Option) admin.site.register(Option, OptionAdmin)
admin.site.register(Setting)

View File

@ -95,3 +95,10 @@
stock: 44 stock: 44
status: 3 status: 3
price_in_chf: 41.4 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

View File

@ -1,5 +1,5 @@
from django import forms from django import forms
from webshop.models import Salutation, City from webshop.models import Salutation, City, Picture, Article, Option
class RegistrationForm(forms.Form): class RegistrationForm(forms.Form):
@ -22,3 +22,32 @@ class RegistrationForm(forms.Form):
raise forms.ValidationError( raise forms.ValidationError(
"The zip code and the city don't match.") "The zip code and the city don't match.")
return city 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']

View File

@ -7,18 +7,12 @@ from django.utils import timezone
class Option(models.Model): class Option(models.Model):
name = models.CharField(max_length=200, unique=True) name = models.CharField(max_length=200, unique=True)
description = models.CharField(max_length=200, unique=True)
value = models.IntegerField(default=5) 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) enabled = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return str(self.option) return self.name
class ArticleStatus(models.Model): class ArticleStatus(models.Model):
@ -74,8 +68,8 @@ class OrderOfGoods(models.Model):
class Picture(models.Model): class Picture(models.Model):
name = models.CharField(max_length=200, unique=True) name = models.CharField(max_length=200)
article = models.ForeignKey(Article, on_delete=models.CASCADE) article = models.ForeignKey(Article)
image = models.ImageField(upload_to="images") image = models.ImageField(upload_to="images")
def __str__(self): def __str__(self):