带字段覆盖的Django ModelForm不会发布数据

时间:2011-11-07 20:52:56

标签: django django-forms

所以,我有以下表格:

class DesignItemForm (forms.ModelForm):
def __init__(self, *args, **kwargs):
    super(DesignItemForm, self).__init__(*args, **kwargs)
    CHOICES=[(i,i) for i in range(MAX_DESIGN_ITEM_QUANTITY)]
    self.fields['quantity'] = forms.ChoiceField(choices=CHOICES)    
class Meta:
    model = DesignItem
    fields = ('quantity','trackable',)

我的观点:

d = Design.object.get(slug=fromInput)
....
DesignItemInlineFormSet = inlineformset_factory(Design, DesignItem, fk_name="design", form=DesignItemForm,)

    if request.method == "POST":
    formset = DesignItemInlineFormSet(request.POST, request.FILES, instance=d)
    if formset.is_valid():
        formset.save() 
DesignItemInlineFormSet(instance=d)

正如您所知,在我的表单中,我将数量字段覆盖为下拉而不是整数字段。

出于某种原因,当我提交表单时,数据不会在数据库中更新。但是,如果我将表单更改为以下内容,它可以正常工作(当然,它没有我想要的下拉列表,但它会发布到数据库)。为什么会这样,我该如何解决?

class DesignItemForm (forms.ModelForm):
def __init__(self, *args, **kwargs):
    super(DesignItemForm, self).__init__(*args, **kwargs)
    # CHOICES=[(i,i) for i in range(MAX_DESIGN_ITEM_QUANTITY)]
    # self.fields['quantity'] = forms.ChoiceField(choices=CHOICES)  
class Meta:
    model = DesignItem
    fields = ('quantity','trackable',)

编辑:这是DesignItem模型:

class DesignItem(models.Model):
"""Specifies how many of an item are in a design."""
design = models.ForeignKey(Design, related_name="items")
quantity = models.PositiveIntegerField(default=1)
trackable = models.ForeignKey(Trackable, related_name="used")

1 个答案:

答案 0 :(得分:1)

您是否尝试过覆盖小部件而不是整个字段?

我想你想要一个select widget

def __init__(self, *args, **kwargs):
    super(DesignItemForm, self).__init__(*args, **kwargs)
    CHOICES=[(i,i) for i in range(MAX_DESIGN_ITEM_QUANTITY)]
    self.fields['quantity'].widget = forms.Select(choices=CHOICES)