Django:将网址条传递给表单集queryset

时间:2018-07-17 05:46:08

标签: django formset

我正在尝试使用这种“替代方法”来change the queryset使用我的表单:

  

或者,您可以创建一个子类,在其中设置self.queryset   初始化

from django.forms import BaseModelFormSet from myapp.models import Author

class BaseAuthorFormSet(BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.queryset = Author.objects.filter(name__startswith='O')

现在我的问题是,我必须将变量传递到此查询集中。因此,我试图像这样在我的forms.py中调整BaseAuthorFormSet:

class BaseAssignAttendeeFormSet(BaseModelFormSet):

    def __init__(self, order_reference, access_key, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.queryset = Attendee.objects.filter(
            order__order_reference=order_reference,
            order__access_key=access_key,
        )

我在function-based-view中的views.py像这样开始:def assign_attendee(request, order_reference, access_key): order_referenceaccess_key是来自URL的块。

有人知道将这两个参数传递给我的查询集的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以在视图的表单集初始化期间传递参数:

MyFormSet = modelformset_factory(MyModel, fields=('name', 'title'), formset=BaseAssignAttendeeFormSet)
formset = MyFormSet(order_reference, access_key, #Other orguments here)

在表单集中,您需要调用超类的__init__方法:

class BaseAssignAttendeeFormSet(BaseModelFormSet):

    def __init__(self, order_reference, access_key, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.queryset = Attendee.objects.filter(
            order__order_reference=order_reference,
            order__access_key=access_key,
        )