Django modelformset_factory()筛选

Django modelformset_factory()筛选,django,django-forms,Django,Django Forms,我需要从我的查询中过滤掉大量的对象。目前,它正在抓取类中的所有对象,我想将其过滤到querystring中的相关对象。我该怎么做?当我尝试时,我得到一个属性错误 ''QuerySet' object has no attribute '__name__'.' 有效但非常缓慢的代码是: formset = modelformset_factory(Transaction, form=PaidDateForm, extra=0, can_delete=False) 此外,表单集: formset

我需要从我的查询中过滤掉大量的对象。目前,它正在抓取类中的所有对象,我想将其过滤到querystring中的相关对象。我该怎么做?当我尝试时,我得到一个属性错误

''QuerySet' object has no attribute '__name__'.'
有效但非常缓慢的代码是:

formset = modelformset_factory(Transaction, form=PaidDateForm, extra=0, can_delete=False)
此外,表单集:

formset = formset(request.POST, Transaction.objects.filter(pk__in=qs))
我要筛选的查询字符串称为“qs”

class PaidDateForm(forms.ModelForm):
    formfield_callback = jquery_datefield
Amount",max_digits=14,decimal_places=2,required=False)
    date_cleared = forms.DateField(label="Cleared Date",widget=JQueryDateWidget(), input_formats=settings.DATE_INPUT_FORMATS, required=False)

    class Meta:
        model = Transaction
        include = ('date_time_created')

    def __init__(self, *args, **kwargs):
        self.queryset = Transaction.objects.filter(pk__in=qs)
        super(PaidDateForm, self).__init__(*args, **kwargs)
        for field in self.fields:
            if field != 'date_cleared':
                self.fields[field].widget = forms.HiddenInput()
        self.fields['paid_amount'].widget.attrs['size'] = 12
        self.initial['paid_amount'] = '%.2f' % (self.instance.usd_amount)

请看Django文档中的示例:

如果我正确理解您的问题,有两种方法解决您的问题:

第一:

TransactionFormset = modelformset_factory(Transaction,form=PaidDateForm, extra=0, can_delete=False)
formset = TransactionFormset(queryset=Transaction.objects.filter(pk__in=qs))
第二个选项是创建BaseTransactionFormset

class BaseTransactionFormSet(BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        super(BaseTransactionFormSet, self).__init__(*args, **kwargs)

        #create filtering here whatever that suits you needs
        self.queryset = Transaction.objects.filter()

formset = modelformset_factory(Transaction, formset=BaseTransactionFormSet,form=PaidDateForm, extra=0, can_delete=False)

这段代码对您有帮助吗?

我不知道您是否还需要它,但这段代码对我很有用

FormSet =  modelformset_factory(YourModel, fields=(...))
form_set = FormSet(queryset = YourModel.objects.filter(...))

我以前曾尝试在我的表单PaidDataForm()中定义queryset,但遇到了一个NameError“未定义全局名称”qs。该表单现在已添加到我的原始帖子中: