2
我使用inlineformset_factory
为客户和会话之间的多对多关系创建字段,并使用中间人出席模型。Django - 将参数传递给内嵌套件
我有我的看法如下文件:
AttendanceFormset = inlineformset_factory(
Session,
Attendance,
formset=BaseAttendanceFormSet,
exclude=('user'),
extra=1,
max_num=10,
)
session = Session(user=request.user)
formset = AttendanceFormset(request.POST, instance=session)
而且,我需要重写表单域的一个,我添加了下面的表单集基类:
class BaseAttendanceFormSet(BaseFormSet):
def add_fields(self, form, index):
super(BaseAttendanceFormSet, self).add_fields(form, index)
form.fields['client'] = forms.ModelChoiceField(
queryset=Client.objects.filter(user=2))
现在,表单工作正常,但我需要传递一个值到formset中,以便我可以过滤基于当前用户显示的客户端,而不仅仅使用ID 2.
任何人都可以 帮帮我?
任何意见赞赏。
谢谢。
编辑
对于任何阅读,这是对我工作:
def get_field_qs(field, **kwargs):
if field.name == 'client':
return forms.ModelChoiceField(queryset=Client.objects.filter(user=request.user))
return field.formfield(**kwargs)
您好,感谢您的回复。我尝试添加上面的内容(尽管我必须返回field.formfield(** kwargs)而不是字段),但它现在返回所有客户端对象。我已经在django工具栏中读取了查询并且过滤器没有被应用,我试图从if语句内输出到控制台,所以我知道我被击中。任何想法为什么它可能会忽略它?再次感谢。 – Dan
你可以用第二次尝试更新你的问题吗?猜你还可以返回forms.ModelChoiceField(queryset = Client.objects.filter(user = request.user))如果该字段被命名为客户端 – mkriheli
谢谢,现在工作:) – Dan