Я пытаюсь создать подкласс формы, и мне нужно получить все аргументы / kwargs из основной формы.Я знаю питонический способ, но есть ли что-то, что мне нужно сделать специально для Django.
Основная форма:
class BasketLineForm(forms.ModelForm):
save_for_later = forms.BooleanField(
initial=False, required=False, label=_('Save for Later'))
def __init__(self, strategy, *args, **kwargs):
super(BasketLineForm, self).__init__(*args, **kwargs)
self.instance.strategy = strategy
max_allowed_quantity = None
num_available = getattr(self.instance.purchase_info.availability, 'num_available', None)
basket_max_allowed_quantity = self.instance.basket.max_allowed_quantity()[0]
if all([num_available, basket_max_allowed_quantity]):
max_allowed_quantity = min(num_available, basket_max_allowed_quantity)
else:
max_allowed_quantity = num_available or basket_max_allowed_quantity
if max_allowed_quantity:
self.fields['quantity'].widget.attrs['max'] = max_allowed_quantity
def clean_quantity(self):
qty = self.cleaned_data['quantity']
if qty > 0:
self.check_max_allowed_quantity(qty)
self.check_permission(qty)
return qty
def check_max_allowed_quantity(self, qty):
qty_delta = qty - self.instance.quantity
is_allowed, reason = self.instance.basket.is_quantity_allowed(qty_delta)
if not is_allowed:
raise forms.ValidationError(reason)
def check_permission(self, qty):
policy = self.instance.purchase_info.availability
is_available, reason = policy.is_purchase_permitted(
quantity=qty)
if not is_available:
raise forms.ValidationError(reason)
class Meta:
model = Line
fields = ['quantity']
SubForm для наследования основной формы в другом приложении:
class BatteryForm(CoreBasketLineForm):
class Meta(CoreBasketLineForm.Meta):
model = Batteries
fields = ('title', 'price', 'comment')