aboutsummaryrefslogtreecommitdiff
path: root/store/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'store/forms.py')
-rw-r--r--store/forms.py61
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")