gpt4 book ai didi

python - Django - 将参数传递给内联表单集

转载 作者:太空狗 更新时间:2023-10-30 00:51:56 24 4
gpt4 key购买 nike

我正在使用 inlineformset_factory 为客户端和 session 之间的多对多关系创建字段,并使用中间出勤模型。

我的 View 文件中有以下内容:

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))

现在,表单可以正常工作,但我需要将一个值传递到表单集中,以便我可以根据当前用户过滤显示的客户端,而不仅仅是使用 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)

最佳答案

如何利用 inlineformset_factory 的 formfield_callback 参数而不是提供 formset?提供一个可调用对象,该可调用对象依次返回应在表单中使用的字段。

表单字段回调获取字段作为第一个参数,以及可选参数的**kwargs(例如:小部件)。

例如(使用 request.user 作为过滤器,如果需要替换为另一个:

def my_view(request):
#some setup code here

def get_field_qs(field, **kwargs):
formfield = field.formfield(**kwargs)
if field.name == 'client':
formfield.queryset = formfield.queryset.filter(user=request.user)
return formfield

AttendanceFormset = inlineformset_factory(
...
formfield_callback=get_field_qs
...
)

formset = AttendanceFormset(request.POST, instance=session)

为了更好地理解它,请参阅 formfield_callback in Django's FormSet code 的用法.

关于python - Django - 将参数传递给内联表单集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com