diff options
| author | Mole Shang <135e2@135e2.dev> | 2026-01-24 19:47:41 +0800 |
|---|---|---|
| committer | Mole Shang <135e2@135e2.dev> | 2026-01-24 19:47:41 +0800 |
| commit | b45660fbcf5dd22188354bfa0193845e568bda53 (patch) | |
| tree | 172825ef6e210ce03fc2241395c6cbc389538a2b /store/forms.py | |
| download | seu-bookstore-b45660fbcf5dd22188354bfa0193845e568bda53.tar.gz seu-bookstore-b45660fbcf5dd22188354bfa0193845e568bda53.tar.bz2 seu-bookstore-b45660fbcf5dd22188354bfa0193845e568bda53.zip | |
initial commit
Diffstat (limited to 'store/forms.py')
| -rw-r--r-- | store/forms.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/store/forms.py b/store/forms.py new file mode 100644 index 0000000..1a07b6b --- /dev/null +++ b/store/forms.py @@ -0,0 +1,61 @@ +from django import forms +from django.conf import settings +from django.contrib.auth.forms import UserCreationForm +from django.core.files.storage import default_storage +from .models import User, Book +import os +import hashlib +import io + +class UserRegisterForm(UserCreationForm): + class Meta: + model = User + fields = ['username', 'email', 'phone', 'address', 'name'] + + def save(self, commit=True): + user = super().save(commit=False) + user.roles = ['user'] + if commit: + user.save() + return user + +class BookForm(forms.ModelForm): + cover_url = forms.URLField(required=False, label="Cover Image URL") + cover_upload = forms.ImageField(required=False, label="Cover Image File Upload") + + class Meta: + model = Book + fields = ['title', 'author', 'publisher', 'price', 'stock', 'isbn', 'description'] + + def clean(self): + cleaned_data = super().clean() + cover_url = cleaned_data.get("cover_url") + cover_upload = cleaned_data.get("cover_upload") + if cover_url and cover_upload: + raise forms.ValidationError("Please provide either a URL or an upload, not both.") + return cleaned_data + + def save(self, commit=True): + instance = super().save(commit=False) + cover_url = self.cleaned_data.get('cover_url') + cover_upload = self.cleaned_data.get('cover_upload') + + if cover_url: + instance.cover = cover_url + elif cover_upload: + file_content = cover_upload.read() + file_hash = hashlib.md5(file_content).hexdigest()[:16] # Using first 16 chars for brevity + cover_upload.seek(0) + + name, ext = os.path.splitext(cover_upload.name) + unique_filename = f"{name}_{file_hash}{ext}" + + file_name = default_storage.save(os.path.join('covers', unique_filename), cover_upload) + instance.cover = os.path.join(settings.MEDIA_URL, file_name) + + if commit: + instance.save() + return instance + +class ImportBookForm(forms.Form): + file = forms.FileField(label="JSONL File") |
