gpt4 book ai didi

python - CreateView使用参数

转载 作者:行者123 更新时间:2023-11-30 23:13:56 24 4
gpt4 key购买 nike

在我的表单中,我有一个下拉列表projects,它应该使用ModelChoiceField显示基于特定类型的一些元素。这个查询需要一些参数,但是如何将此参数传递给表单呢?

class TaskCreate(CreateView):
model = Task
fields = ['name', 'description', 'project']

def form_valid(self, form):
return super(TaskCreate, self).form_valid(form)

\

class TaskcreateForm(forms.ModelForm):
projects = forms.ModelChoiceField(queryset=Project.objects.filter(type=someParameter))
class Meta:
model = Task

最佳答案

您应该使用 View 的 get_form_kwargs 方法:

class TaskCreate(CreateView):
model = Task
fields = ['name', 'description', 'project']

def form_valid(self, form):
return super(TaskCreate, self).form_valid(form)

def get_form_kwargs(self):
"""
Returns the keyword arguments for instantiating the form.
"""
kwargs = super(TaskCreate, self).get_form_kwargs()
kwargs.update({'my_var': 'my value'})
return kwargs

然后以 __init__ 方法的形式捕获该参数。您还需要在 __init__ 方法中设置字段的查询集:

class TaskcreateForm(forms.ModelForm):
projects = forms.ModelChoiceField(queryset=Project.objects.none())

def __init__(self, *args, **kwargs):
self.my_var = kwargs.pop('my_var')
super(TaskcreateForm, self).__init__(*args, **kwargs)
self.fields['projects'].queryset = Project.objects.filter(type=self.my_var))

class Meta:
model = Task

必须使用 kwargs.pop(),否则对 super() 的调用将因意外的关键字参数而引发错误。

CCBV是一个很好的资源,用于详细介绍所有通用的基于类的 View 上可用的方法。

关于python - CreateView使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032136/

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