亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django 表單集 - 如何為模型表單集中的每個表單提供不同的查詢集

Django 表單集 - 如何為模型表單集中的每個表單提供不同的查詢集

慕絲7291255 2021-06-14 09:05:10
我有一個模型表單 - ClinicallyReportedSample,它鏈接到一個樣本模型。我正在嘗試為 ClinicallyReportedSample 創建一個表單集,其中基于 Sample 的查詢集,顯示特定數量的表單,以便用戶可以添加數據。目前,Sample 模型有條目,但 ClinicallyReportedSample 模型是完全空的:楷模:class Sample(models.Model):    request_number = models.PositiveIntegerField()    year = models.PositiveIntegerField()    class Meta:        db_table = "sample"        unique_together = (('request_number', 'year'),)    def __str__(self):        return("%s/%s" %(self.request_number, self.year))class ClinicallyReportedSample(models.Model):    sample_id = models.ForeignKey(Sample,                                on_delete=models.CASCADE,                                db_column='sample_id')    reported = models.BooleanField(default=False)    evidence = models.TextField(null=True, blank=True)    ... other fields ...    class Meta:        db_table = "clinically_reported_sample"        unique_together = (('sample_id'),)    def __str__(self):        clinically_reported_sample = str(self.sample_id)        return(clinically_reported_sample)我想要在表單集中的 ClinicallyReportedSample 模型表單,它與 Sample 模型的查詢集相關。例如,具有 pk 1、2 和 3 的樣本對象:表格.py:class BaseCRSFormSet(BaseModelFormSet):    def __init__(self, *args, **kwargs):        super().__init__(*args, **kwargs)        # self.queryset = ClinicallyReportedVariant.objects.none()class CRSForm(forms.ModelForm):    class Meta:        model = ClinicallyReportedSample        fields = ('sample_id', 'evidence',)    def __init__(self, *args, **kwargs):        super(CRSForm, self).__init__(*args, **kwargs)所以我嘗試在我的表單集中使用查詢集來做到這一點視圖.py:def get(self, request, *args, **kwargs):    sample_obj = Sample.objects.filter(id__in=[1, 2, 3])    formset = modelformset_factory(                ClinicallyReportedSample,                form=self.crsform,                formset=BaseCRSFormSet,                extra=3,            )    formset = formset(queryset=sample_obj)但這顯示為三種形式,對于所有示例對象,查詢集不起作用。這是解決這個問題的正確方法嗎?
查看完整描述

1 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

您需要將默認的 Sample queryset 設置為 none:


class CRSForm(forms.ModelForm):


    class Meta:

        model = ClinicallyReportedSample

        fields = ('sample_id', 'evidence',)


    sample_id = forms.ModelChoiceField(queryset=Sample.objects.none())


    def __init__(self, *args, **kwargs):

        super(CRSForm, self).__init__(*args, **kwargs)

然后當你創建一個表單集實例時,像這樣手動分配查詢集:


def get(self, request, *args, **kwargs):


    sample_obj = Sample.objects.filter(id__in=[1, 2, 3])


    formset = modelformset_factory(

                ClinicallyReportedSample,

                form=self.crsform,

                formset=BaseCRSFormSet,

                extra=3,

            )



    formset = formset(queryset=sample_obj)


    for form in formset:

        form.fields['sample_id'].queryset = sample_obj

請注意,您還必須在 POST 函數中手動設置查詢集,否則將無法驗證。


查看完整回答
反對 回復 2021-06-15
  • 1 回答
  • 0 關注
  • 313 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號