我试图子类化一个表单,我需要从主窗体中获取所有args / kwargs . 我知道pythonic方式,但是我需要特别为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')