将Django模型条目显示为表单的一部分

时间:2018-04-12 12:51:36

标签: django forms

我想将模型条目显示为表单的一部分,以便我可以更新它们。做这个的最好方式是什么?我正在使用脆皮形式。

我首先过滤我的对象,然后我想将此对象显示为一个表单,其中某些模型属性仅显示,某些属性正在更新。

本质上是一个表,其中包含无法修改的obj的所有属性,其中2个属性将在表单中更新。

forms.py:

class ReportSampleForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super(ReportSampleForm, self).__init__(*args, **kwargs)

        sample = self.data.get('sample_id', False)
        obj = VariantAnnotationSampleRun.objects.filter(sample_run_id=sample)

        self.helper = FormHelper()

        self.fields['id'] = forms.ChoiceField(
                required=True,
                label='blah:',
                widget=forms.CheckboxSelectMultiple,
                choices=((s.id, (s.variant_annotation_id.variant_id, s.attribute1, s.attribute2)) for s in obj)
            )

        self.helper.form_method = 'POST'

这会显示带有variant_id,attribute1和attribute2的复选框,但我希望填写模型条目'证据'和'注释',如果选中复选框并提交表单,则数据库会针对该特定模型条目进行更新

models.py:

class VariantAnnotationSampleRun(models.Model):

    variant_annotation_id = models.ForeignKey(VariantAnnotation,
    attribute1 = models.DecimalField(max_digits=8, decimal_places=3)
    attribute2 = models.IntegerField()

    reported = models.BooleanField(default=False)
    evidence = models.TextField(null=True, blank=True)
    annotation = models.CharField(max_length=80, null=True, blank=True)

从我的观点来看,这可能不会构建一个完全定制的形式吗?

1 个答案:

答案 0 :(得分:0)

使用ModelForm,选择要在其中使用的模型条目,并创建该表单的实例。

class MyModel (models.Model):
   ...


class MyForm (forms.ModelForm):
   model = MyModel


def my_view(request):
   obj = myModel.objects.get(id=1)
   variables = {}
   variables['form'] = myForm(instance=obj)
   render (request, 'mypage.html', variables)

然后在mypage.html中包含{{ form }},无论您想要它。