禁用表单字段Django inlineformset_factory

时间:2017-10-15 10:11:07

标签: python django

可能很容易

我试图禁用(即该字段存在但是显示为灰色)" sub_total'所有formset行上的字段,并使用javascript更新字段,无论输入到' price_estimate'和'数量'字段。

我有以下型号:

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']

除了上面的代码之外 - 我试图修改 init 上的sub_total字段,但是,无论我尝试什么,似乎都会被忽略。

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

我怀疑 - 非常基本的错误。视图应如下所示(即不设置formset标志。

import tkinter

def createlabel(*args, **kwargs):
    if 'text' in kwargs and isinstance(kwargs['text'], list):
        kwargs['text'] = ''.join(map(str, kwargs['text']))
    return tkinter.Label(*args, **kwargs)

window = tkinter.Tk()

A = [1," ", 3]

label = createlabel(window, text = A[0:])
label.pack()

window.mainloop()

除此之外 - 应修改表单以使用ModelForm(而不是BaseInlineFormSet)

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