Files
clovening/splitchat/core/forms.py
MonkeyStrongTogether 87ec426fed Inital commit
2026-05-22 17:48:03 +02:00

65 lines
2.6 KiB
Python

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from decimal import Decimal
from .models import ChatRoom, Event, Expense, ExpenseSplit, Membership, UserProfile
class SignUpForm(UserCreationForm):
email = forms.EmailField(required=True)
first_name = forms.CharField(max_length=50, required=False)
last_name = forms.CharField(max_length=50, required=False)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')
class ChatRoomForm(forms.ModelForm):
class Meta:
model = ChatRoom
fields = ('name', 'description')
widgets = {
'name': forms.TextInput(attrs={'placeholder': 'Room name...', 'autocomplete': 'off'}),
'description': forms.Textarea(attrs={'placeholder': 'What is this room for?', 'rows': 3}),
}
class EventForm(forms.ModelForm):
event_date = forms.DateTimeField(
required=False,
widget=forms.DateTimeInput(attrs={'type': 'datetime-local'}),
input_formats=['%Y-%m-%dT%H:%M'],
)
class Meta:
model = Event
fields = ('title', 'description', 'location', 'event_date')
widgets = {
'title': forms.TextInput(attrs={'placeholder': 'Event title...'}),
'description': forms.Textarea(attrs={'rows': 3, 'placeholder': 'Details...'}),
'location': forms.TextInput(attrs={'placeholder': 'Location (optional)'}),
}
class ExpenseForm(forms.Form):
description = forms.CharField(max_length=200, widget=forms.TextInput(attrs={'placeholder': 'What was this for?'}))
amount = forms.DecimalField(max_digits=10, decimal_places=2, min_value=Decimal('0.01'),
widget=forms.NumberInput(attrs={'placeholder': '0.00', 'step': '0.01'}))
paid_by = forms.ModelChoiceField(queryset=User.objects.none(), empty_label="Who paid?")
split_type = forms.ChoiceField(choices=Expense.SPLIT_CHOICES, initial='equal',
widget=forms.RadioSelect)
participants = forms.ModelMultipleChoiceField(
queryset=User.objects.none(),
widget=forms.CheckboxSelectMultiple,
required=True,
)
def __init__(self, *args, room=None, **kwargs):
super().__init__(*args, **kwargs)
if room:
members = User.objects.filter(memberships__room=room, memberships__is_active=True)
self.fields['paid_by'].queryset = members
self.fields['participants'].queryset = members
self.fields['participants'].initial = members