falsche vorgehensweise um settings.py zurück zu bekommen

This commit is contained in:
Ivan Hörler 2018-01-14 14:07:53 +01:00
parent c4d018be95
commit 013d3d2d28
10 changed files with 99 additions and 22 deletions

View File

@ -43,5 +43,13 @@
group: www-data group: www-data
mode: 0755 mode: 0755
- name: Add currency refresh cronjob
cron:
name: "refresh currencies"
minute: "0"
job: "wget -O /dev/null https://didgeridoo.ml/currencies"
- name: Restart apache service - name: Restart apache service
service: name=apache2 state=restarted service: name=apache2 state=restarted

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,10 +16,47 @@ 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):
model = Picture
form = PictureForm
can_delete = False
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,)
class ArticleAdmin(admin.ModelAdmin):
inlines = (PictureInline,)
class OrderPositionInline(admin.StackedInline): class OrderPositionInline(admin.StackedInline):
model = OrderPosition model = OrderPosition
can_delete = False can_delete = False
@ -42,11 +81,10 @@ class OrderOfGoodsAdmin(admin.ModelAdmin):
admin.site.unregister(User) admin.site.unregister(User)
admin.site.register(User, UserAdmin) admin.site.register(User, UserAdmin)
admin.site.register(Article) 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(Picture)
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):

View File

@ -25,7 +25,7 @@
</table> </table>
{% else %} {% else %}
<p class="alert"> <p class="alert">
Something whent wrong, no articles are stored. We are sorry but there are currently no articles in this category.
</p> </p>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -26,7 +26,7 @@
</table> </table>
{% else %} {% else %}
<p class="alert"> <p class="alert">
Something whent wrong, no articles are stored. We are sorry but there are currently no articles being sold.
</p> </p>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -59,10 +59,11 @@ def article_details(request, article_id):
{i: Category.objects.filter(parent_category=i.id)}) {i: Category.objects.filter(parent_category=i.id)})
article = get_object_or_404(Article, pk=article_id) article = get_object_or_404(Article, pk=article_id)
picture_list = Picture.objects.filter(article=article_id)
return render(request, 'webshop/article_details.html', return render(request, 'webshop/article_details.html',
{'article': article, {'article': article,
'category_list': category_list}) 'category_list': category_list,
'picture_list': picture_list})
@login_required @login_required
def profile(request): def profile(request):

View File

@ -8,8 +8,8 @@
} }
@book{djangobook, @book{djangobook,
Note = {{\url{https://djangobook.com/}}},
publisher = {{leanpub.com}}, publisher = {{leanpub.com}},
Url = {{https://djangobook.com/}},
Urldate = {{2018-01-08}}, Urldate = {{2018-01-08}},
author = {Nigel George}, author = {Nigel George},
title = {{Mastering Django: Core}}, title = {{Mastering Django: Core}},

View File

@ -485,7 +485,7 @@ ein Ergebnis eines Anwendungsfalls sein (e.g. falsches Pass- wort beim
Login). Dabei wird die technische Lösung nicht konkret beschrieben. Login). Dabei wird die technische Lösung nicht konkret beschrieben.
Die Detailstufe kann dabei sehr unterschiedlich sein.\footcite{usecase} Die Detailstufe kann dabei sehr unterschiedlich sein.\footcite{usecase}
**** TODO Anwendungsfalliagramm **** Anwendungsfalliagramm
"Ein Anwendungsfalldiagramm ... ist eine der 14 Diagrammarten der "Ein Anwendungsfalldiagramm ... ist eine der 14 Diagrammarten der
Unified Modeling Language (UML), einer Sprache für die Modellierung Unified Modeling Language (UML), einer Sprache für die Modellierung