70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
from django import forms
|
|
from django.contrib.auth.forms import UserCreationForm
|
|
from django.contrib.auth.models import User
|
|
from .models import Item, UserProfile
|
|
|
|
|
|
class SignupForm(UserCreationForm):
|
|
email = forms.EmailField(required=True)
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = ['username', 'email', 'password1', 'password2']
|
|
|
|
|
|
class ItemForm(forms.ModelForm):
|
|
progress_percent = forms.FloatField(
|
|
min_value=0,
|
|
max_value=100,
|
|
initial=0,
|
|
widget=forms.NumberInput(attrs={
|
|
'type': 'range',
|
|
'min': '0',
|
|
'max': '100',
|
|
'step': '1',
|
|
}),
|
|
)
|
|
|
|
class Meta:
|
|
model = Item
|
|
fields = [
|
|
'category', 'name', 'progress_percent', 'favorite',
|
|
'hours_played', 'total_hours',
|
|
'pages_read', 'total_pages',
|
|
'watched', 'duration_minutes',
|
|
]
|
|
widgets = {
|
|
'hours_played': forms.NumberInput(attrs={'step': '0.5', 'min': '0'}),
|
|
'total_hours': forms.NumberInput(attrs={'step': '0.5', 'min': '0'}),
|
|
'pages_read': forms.NumberInput(attrs={'min': '0'}),
|
|
'total_pages': forms.NumberInput(attrs={'min': '0'}),
|
|
'duration_minutes': forms.NumberInput(attrs={'min': '0'}),
|
|
}
|
|
|
|
def clean(self):
|
|
cleaned_data = super().clean()
|
|
category = cleaned_data.get('category')
|
|
if category != Item.GAMES:
|
|
cleaned_data['hours_played'] = None
|
|
cleaned_data['total_hours'] = None
|
|
if category != Item.BOOKS:
|
|
cleaned_data['pages_read'] = None
|
|
cleaned_data['total_pages'] = None
|
|
if category != Item.FILMS:
|
|
cleaned_data['watched'] = None
|
|
cleaned_data['duration_minutes'] = None
|
|
return cleaned_data
|
|
|
|
|
|
class ProfileForm(forms.ModelForm):
|
|
class Meta:
|
|
model = UserProfile
|
|
fields = ['display_name', 'theme']
|
|
widgets = {
|
|
'display_name': forms.TextInput(attrs={'placeholder': 'Your full name (optional)'}),
|
|
}
|
|
labels = {
|
|
'display_name': 'Display name',
|
|
'theme': 'Theme',
|
|
}
|