我正在尝试使用这种“替代方法”来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_reference
和access_key
是来自URL的块。
有人知道将这两个参数传递给我的查询集的方法吗?
答案 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,
)