【发布时间】:2018-12-18 12:47:52
【问题描述】:
我想要一个名为 AddManualVariantForm 的模型表单,它是我的模型 VariantAnnotationSampleRun 的模型表单。
此模型是链接到 VariantAnnotation 和 SampleRun 模型的外键:
class VariantAnnotationSampleRun(models.Model):
variant_annotation_id = models.ForeignKey(VariantAnnotation,
on_delete=models.CASCADE, db_column='variant_annotation_id')
sample_run_id = models.ForeignKey(SampleRun,
on_delete=models.CASCADE, db_column='sample_run_id')
我想制作一个模型表单,它将创建一个 VariantAnnotationSampleRun 实例。基本上,我想在我的页面上显示与 1 个 SampleRun 相关的 5 个“VariantAnnotation”实例,如果用户选中一个复选框,则创建一个 VariantAnnotationSampleRun 实例。
首先 - 我将其作为 VariantAnnotationSampleRun 模型形式这样做是否正确?
这是我目前正在尝试的:
forms.py:
class AddManualVariantForm(forms.ModelForm):
report = forms.ChoiceField(
choices =(
("dontreport", '-'),
("report" , 'Report'),
("toconfirm", 'To confirm')
),
label = 'report'
)
class Meta:
model = VariantAnnotationSampleRun
fields = ('id', 'report')
def __init__(self, *args, **kwargs):
sample_obj = kwargs.pop('sample_obj', None)
super(AddManualVariantForm, self).__init__(*args, **kwargs)
views.py:
class VariantSampleRunList(LoginRequiredMixin, View):
addvariantform = AddManualVariantForm
def get(self, request, *args, **kwargs):
va_lst = [..list of VariantAnnotation IDs I want to include...]
FormSet = modelformset_factory(
VariantAnnotationSampleRun,
form=self.addvariantform,
extra=0
)
formset = FormSet(
queryset = VariantAnnotation.objects.filter(id__in=va_lst),
# form_kwargs={'sample_run_obj':sample_run_obj}
)
这会在我的页面上以 formset 的形式显示我想要的 VariantAnnotation 实例,但“id”是 VariantAnnotation 对象的 - 不是 VariantAnnotationSampleRun 对象 - 因此该 formset 无效。
但是我试图从头开始创建一个 VariantAnnotationSampleRun 对象 - 没有 VariantAnnotationSampleRun id - 这就是我试图制作的,但同时使用 sample_run_id 和 variant_annotation_id(这些表的外键链接)
当我在我的字段列表中包含 variant_annotation_id 时 - 表单会在下拉列表中生成所有 variant_annotation_id。
我很困惑 - 有人可以帮助我更好地了解如何从模型表单制作模型实例,以及我是否以完全错误的方式进行操作
谢谢
【问题讨论】:
-
您试图在用户点击复选框时将数据保存在数据库中?