added aspect ratio checking for admin (+note)

This commit is contained in:
seba 2011-10-08 05:05:27 +02:00
parent c42babf7c3
commit 0bd4f3b4e0
2 changed files with 31 additions and 2 deletions

View File

@ -1,7 +1,36 @@
from models import Buyable, BuyableType, Purchase, Order from models import Buyable, BuyableType, Purchase, Order
from django.contrib import admin from django.contrib import admin
from django import forms
from PIL import Image
from django.core.files.uploadedfile import InMemoryUploadedFile
admin.site.register(Buyable) class BuyableAdminForm(forms.ModelForm):
""" Special BuyableAdminForm which checks the buyable image for an 1:1 aspect ratio. """
class Meta:
model = Buyable
def clean_image(self):
img = self.cleaned_data['image']
print img.file
print dir(img)
width, height = (0, 0)
if isinstance(img, InMemoryUploadedFile):
i = Image.open(img)
width, height = i.size
else:
width, height = img.width, img.height
if width != height:
raise forms.ValidationError("Aspect ratio of image should be 1:1 (width x height was (%dx%d))"% (width, height))
return self.cleaned_data['image']
class BuyableAdmin(admin.ModelAdmin):
form = BuyableAdminForm
admin.site.register(Buyable, BuyableAdmin)
admin.site.register(BuyableType) admin.site.register(BuyableType)
admin.site.register(Purchase) admin.site.register(Purchase)
admin.site.register(Order) admin.site.register(Order)

View File

@ -17,7 +17,7 @@ class Buyable(models.Model):
""" Represents a buyable item. """ """ Represents a buyable item. """
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=8, decimal_places=2) price = models.DecimalField(max_digits=8, decimal_places=2)
image = models.ImageField(upload_to='img/buyable/') image = models.ImageField(upload_to='img/buyable/', help_text="<strong>The Image needs to have a 1:1 aspect ratio.</strong>")
deposit = models.DecimalField(max_digits=8, decimal_places=2) deposit = models.DecimalField(max_digits=8, decimal_places=2)
description = models.TextField() description = models.TextField()
buyableType = models.ManyToManyField(BuyableType) buyableType = models.ManyToManyField(BuyableType)