furry/products/forms.py

219 lines
9.1 KiB
Python

from django import forms
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, PasswordChangeForm
from django.contrib.auth.models import User
from .models import Order, Product, Review, UserProfile, ContactMessage, CustomOrder, OrderProgress
class OrderForm(forms.ModelForm):
class Meta:
model = Order
fields = ['full_name', 'email', 'address', 'phone']
widgets = {
'full_name': forms.TextInput(attrs={'class': 'form-control'}),
'email': forms.EmailInput(attrs={'class': 'form-control'}),
'address': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
'phone': forms.TextInput(attrs={'class': 'form-control'}),
}
labels = {
'full_name': 'Vollständiger Name',
'email': 'E-Mail-Adresse',
'address': 'Lieferadresse',
'phone': 'Telefonnummer',
}
class CustomUserCreationForm(UserCreationForm):
email = forms.EmailField(required=True, widget=forms.EmailInput(attrs={'class': 'form-control'}))
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs['class'] = 'form-control'
self.fields['username'].label = 'Benutzername'
self.fields['password1'].label = 'Passwort'
self.fields['password2'].label = 'Passwort bestätigen'
class CustomAuthenticationForm(AuthenticationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs['class'] = 'form-control'
self.fields['username'].label = 'Benutzername'
self.fields['password'].label = 'Passwort'
class ReviewForm(forms.ModelForm):
class Meta:
model = Review
fields = ['rating', 'comment']
widgets = {
'rating': forms.Select(attrs={'class': 'form-control'}),
'comment': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
}
labels = {
'rating': 'Bewertung',
'comment': 'Kommentar',
}
class UserProfileForm(forms.ModelForm):
first_name = forms.CharField(max_length=30, required=False, label='Vorname')
last_name = forms.CharField(max_length=30, required=False, label='Nachname')
email = forms.EmailField(required=True, label='E-Mail-Adresse')
class Meta:
model = UserProfile
fields = ['phone', 'address', 'default_shipping_address', 'newsletter']
labels = {
'phone': 'Telefonnummer',
'address': 'Adresse',
'default_shipping_address': 'Standard-Lieferadresse',
'newsletter': 'Newsletter abonnieren',
}
widgets = {
'address': forms.Textarea(attrs={'rows': 3}),
'default_shipping_address': forms.Textarea(attrs={'rows': 3}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance.user:
self.fields['first_name'].initial = self.instance.user.first_name
self.fields['last_name'].initial = self.instance.user.last_name
self.fields['email'].initial = self.instance.user.email
for field in self.fields:
self.fields[field].widget.attrs['class'] = 'form-control'
def save(self, commit=True):
profile = super().save(commit=False)
if commit:
user = profile.user
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
user.save()
profile.save()
return profile
class ContactForm(forms.ModelForm):
class Meta:
model = ContactMessage
fields = ['name', 'email', 'category', 'order_number', 'subject', 'message']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control'}),
'email': forms.EmailInput(attrs={'class': 'form-control'}),
'category': forms.Select(attrs={'class': 'form-control'}),
'order_number': forms.TextInput(attrs={'class': 'form-control'}),
'subject': forms.TextInput(attrs={'class': 'form-control'}),
'message': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
}
labels = {
'name': 'Name',
'email': 'E-Mail-Adresse',
'category': 'Kategorie',
'order_number': 'Bestellnummer (optional)',
'subject': 'Betreff',
'message': 'Ihre Nachricht',
}
def __init__(self, *args, user=None, **kwargs):
super().__init__(*args, **kwargs)
if user and user.is_authenticated:
self.fields['name'].initial = user.get_full_name() or user.username
self.fields['email'].initial = user.email
class CustomOrderForm(forms.ModelForm):
class Meta:
model = CustomOrder
fields = [
'fursuit_type', 'style', 'character_name',
'character_description', 'reference_images',
'special_requests', 'measurements',
'color_preferences', 'budget_range',
'deadline_request'
]
widgets = {
'fursuit_type': forms.Select(attrs={'class': 'form-select'}),
'style': forms.Select(attrs={'class': 'form-select'}),
'character_name': forms.TextInput(attrs={'class': 'form-control'}),
'character_description': forms.Textarea(attrs={
'class': 'form-control',
'rows': 4,
'placeholder': 'Beschreiben Sie Ihren Character so detailliert wie möglich...'
}),
'special_requests': forms.Textarea(attrs={
'class': 'form-control',
'rows': 3,
'placeholder': 'Besondere Wünsche oder Anforderungen...'
}),
'measurements': forms.Textarea(attrs={
'class': 'form-control',
'rows': 4,
'placeholder': 'Bitte geben Sie alle relevanten Maße an (Kopfumfang, Körpergröße, etc.)'
}),
'color_preferences': forms.Textarea(attrs={
'class': 'form-control',
'rows': 3,
'placeholder': 'Beschreiben Sie die gewünschten Farben und Farbkombinationen...'
}),
'budget_range': forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'z.B. 2000-3000€'
}),
'deadline_request': forms.DateInput(attrs={
'class': 'form-control',
'type': 'date'
}),
'reference_images': forms.FileInput(attrs={
'class': 'form-control',
'accept': 'image/*'
})
}
labels = {
'fursuit_type': 'Art des Fursuits',
'style': 'Gewünschter Stil',
'character_name': 'Name des Characters',
'character_description': 'Beschreibung des Characters',
'reference_images': 'Referenzbilder',
'special_requests': 'Besondere Wünsche',
'measurements': 'Maße',
'color_preferences': 'Farbwünsche',
'budget_range': 'Budget-Rahmen',
'deadline_request': 'Gewünschter Fertigstellungstermin'
}
help_texts = {
'character_description': 'Je detaillierter die Beschreibung, desto besser können wir Ihre Vision umsetzen.',
'reference_images': 'Laden Sie bis zu 5 Referenzbilder hoch (max. 5MB pro Bild)',
'measurements': 'Genaue Maße sind wichtig für eine perfekte Passform.',
'budget_range': 'Geben Sie einen Bereich an, in dem Sie sich preislich bewegen möchten.',
'deadline_request': 'Optional: Wenn Sie einen bestimmten Termin im Auge haben.'
}
class OrderProgressForm(forms.ModelForm):
class Meta:
model = OrderProgress
fields = ['stage', 'description', 'image', 'completed']
widgets = {
'stage': forms.Select(attrs={'class': 'form-select'}),
'description': forms.Textarea(attrs={
'class': 'form-control',
'rows': 3,
'placeholder': 'Beschreiben Sie den aktuellen Fortschritt...'
}),
'image': forms.FileInput(attrs={
'class': 'form-control',
'accept': 'image/*'
}),
'completed': forms.CheckboxInput(attrs={'class': 'form-check-input'})
}
labels = {
'stage': 'Arbeitsschritt',
'description': 'Beschreibung des Fortschritts',
'image': 'Foto des Fortschritts',
'completed': 'Abgeschlossen'
}
help_texts = {
'description': 'Beschreiben Sie detailliert, was in diesem Schritt gemacht wurde.',
'image': 'Fügen Sie ein Foto hinzu, um den Fortschritt zu dokumentieren.',
'completed': 'Markieren Sie diesen Schritt als abgeschlossen, wenn er fertig ist.'
}