创建从数据库对象初始化的modelformset实例

时间:2012-10-11 12:54:07

标签: django django-views django-forms inline-formset

我目前在我的CellType类型的数据库中设置了一系列对象。

我似乎需要的是inline formset,这显然简化了模型之间的外键关系的使用。

我想要的是一个formset,它包含一个CellCount实例的表单,链接到数据库中的每个CellType对象。

cellcount_formset = inlineformset_factory(CellType, 
                                          CellCount,
                                          form=CellCountForm,
                                          can_delete=False)

似乎让我朝着正确的方向前进,但我真正想要的是使用正确的CellType对象填充CellCountForm的单元格字段,从而可以整齐地打包并保存整个事物。事实证明这比我意识到的要复杂得多!

models.py

class CellType(models.Model):
    readable_name = models.CharField(max_length=50)
    machine_name = models.CharField(max_length=50)
    comment = models.TextField(blank=True)

class CellCount(models.Model):
    cell_count_instance = models.ForeignKey(CellCountInstance)
    cell = models.ForeignKey(CellType)
    normal_count = models.IntegerField()
    abnormal_count = models.IntegerField()
    comment = models.TextField(blank=True)

forms.py

class CellCountForm(ModelForm):
    auto_id = False

    class Meta:
        model = CellCount
        widgets = {
                'cell': HiddenInput(),
                'normal_count': HiddenInput,
                'abnormal_count': HiddenInput}
        exclude = ('cell_count_instance', 'comment',)

小部件被隐藏,因为它们在幕后由基于JQuery的计算器填充。

理想情况下,我想要的伪代码逻辑是:

formset containing:
    (x) CellCount forms, 
        the cell field of which is populated with the CellType object
        (x) = number of CellTypes in the database

1 个答案:

答案 0 :(得分:1)

乍一看,您需要删除此extra=len(get_celltype_list()),其中 不是你想要的。这将创建N(其中N == len(get_celltype_list()))其他空表单。