2017-10-15 34 views
0

大概一個容易禁用表單字段的Django inlineformset_factory

我試圖禁用(即該字段是存在的,但灰色)的「SUB_TOTAL」字段上的所有表單集線和使用JavaScript來更新與現場任何價值被輸入到'price_estimate'和'quantity'字段中。

我有以下型號:

class Requisition(models.Model): 
    create_date = models.DateTimeField(auto_now_add=True) 
    modified_date = models.DateTimeField(auto_now=True) 
    description = models.CharField(max_length=128, null=True, blank=True,) 
    total = models.DecimalField(decimal_places=2, max_digits=20, null=True) 

class RequisitionLine(models.Model): 
    requisition = models.ForeignKey(Requisition) 
    product = models.CharField(max_length=50, blank=False) 
    quantity = models.PositiveIntegerField() 
    price_estimate = models.DecimalField(decimal_places=2, max_digits=20) 
    sub_total = models.DecimalField(decimal_places=2, max_digits=20, null=True) 

    @property 
    def get_sub_total(self): 
     return self.quantity * self.price_estimate 

在我看來,我有

Formset = inlineformset_factory(models.Requisition, 
           models.RequisitionLine, 
           form = forms.RequsitionForm, 
           formset= forms.RequisitionLineForm, 
           fields=('product', 'price_estimate', 'quantity', 'sub_total'), 
           extra=2) 

在形式

class RequsitionForm(forms.ModelForm): 
    class Meta: 
     model = models.Requisition 
     fields = ['description'] 

class RequisitionLineForm(forms.BaseInlineFormSet): 

    sub_total = forms.DecimalField(disabled=True, required=False) 

    class Meta: 
     model = models.RequisitionLine 
     fields = ['product', 'quantity', 'price_estimate', 'sub_total'] 

除了上面的代碼 - 我試圖修改然後,初始 sub_total字段,無論我嘗試它似乎是我t被忽略。

任何幫助讚賞

回答

0

正如我懷疑 - 非常基本的錯誤。視圖應該是這樣的(即,不設置該formset標誌

Formset = inlineformset_factory(models.Requisition, 
           models.RequisitionLine, 
           form = forms.RequisitionLineForm, 
           fields=('product', 'price_estimate', 'quantity', 'sub_total'), 
           extra=2) 

除此之外 - 的形式應被修改爲使用的ModelForm(而不是BaseInlineFormSet)

class RequisitionLineForm(forms.ModelForm): 

    sub_total = forms.DecimalField(disabled=True, required=False) 

    class Meta: 
     model = models.RequisitionLine 
     fields = ['product', 'quantity', 'price_estimate', 'sub_total']