from django.contrib.auth.models import User from django.core.exceptions import NON_FIELD_ERRORS, ValidationError from django.db import IntegrityError from django.forms import CharField, ModelForm from la_chariotte.order.models import GroupedOrder, Item class GroupedOrderForm(ModelForm): class Meta: model = GroupedOrder fields = ["name", "deadline", "delivery_date"] def __init__(self, *args, **kwargs): self.user = kwargs.pop("user") super().__init__(*args, **kwargs) def save(self, commit=True): self.instance.orga = User.objects.get(id=self.user.pk) return super().save(commit=commit) def clean(self): cleaned_data = self.cleaned_data try: GroupedOrder.objects.get( name=cleaned_data["name"], delivery_date=cleaned_data["delivery_date"], orga=User.objects.get(id=self.user.pk), ) except GroupedOrder.DoesNotExist: pass else: raise ValidationError( "Une commande groupée avec le même titre et la même date existe déjà" ) return cleaned_data class ItemCreateForm(ModelForm): class Meta: model = Item fields = ["name", "price", "max_limit"] def __init__(self, *args, **kwargs): self.grouped_order = kwargs.pop("grouped_order") # type: GroupedOrder super().__init__(*args, **kwargs) def save(self, commit=True): self.instance.grouped_order = GroupedOrder.objects.get(id=self.grouped_order.pk) return super().save(commit=commit)