【问题标题】:Django: Passing url slugs to formset querysetDjango:将 url slugs 传递给表单集查询集
【发布时间】:2018-07-17 05:46:07
【问题描述】:

我正在尝试使用这种“替代方法”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,
        )

views.py 中的 function-based-view 开头是这样的:def assign_attendee(request, order_reference, access_key): order_referenceaccess_key 是来自 url 的 slug。

有人知道如何将这两个传递给我的查询集吗?

【问题讨论】:

    标签: django formset


    【解决方案1】:

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

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

    在formset中你需要调用超类的__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,
            )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-25
      • 2013-10-22
      • 2012-07-24
      • 2018-04-17
      • 2016-08-06
      • 1970-01-01
      • 2017-07-14
      • 2013-11-20
      相关资源
      最近更新 更多