Files
shoppy/backoffice/forms.py
T
pablo 2a9407e676
CI / ci (ubuntu-24.04, 3.13) (push) Has been cancelled
feat: backoffice setup
2026-07-23 13:31:53 +02:00

36 lines
1.3 KiB
Python

from django import forms
from django.core.exceptions import ValidationError
from shop.models import ProductVariant
class ProductVariantForm(forms.ModelForm):
class Meta:
model = ProductVariant
fields = ('sku', 'stock', 'attribute_values')
widgets = {'attribute_values': forms.CheckboxSelectMultiple}
def __init__(self, *args, product=None, **kwargs):
super().__init__(*args, **kwargs)
self.product = product or self.instance.product
def clean(self):
cleaned_data = super().clean()
attribute_values = cleaned_data.get('attribute_values')
if attribute_values is not None:
combination = set(attribute_values.values_list('pk', flat=True))
siblings = ProductVariant.objects.filter(product=self.product).exclude(pk=self.instance.pk)
for sibling in siblings:
if set(sibling.attribute_values.values_list('pk', flat=True)) == combination:
raise ValidationError(
'Ya existe una variante de este producto con la misma combinación de atributos.'
)
return cleaned_data
def save(self, commit=True):
self.instance.product = self.product
return super().save(commit=commit)