Django ModelForm特定模型的动态字段选择
我正在尝试根据动态项目id筛选“成本名称”字段选项 models.pyDjango ModelForm特定模型的动态字段选择,django,django-models,django-forms,Django,Django Models,Django Forms,我正在尝试根据动态项目id筛选“成本名称”字段选项 models.py class ProjectCost(models.Model): project_name = models.ForeignKey(ProjectName, on_delete=models.CASCADE,null=True) cost_name = models.CharField('Cost Name', max_length=50) total_budget = models.DecimalF
class ProjectCost(models.Model):
project_name = models.ForeignKey(ProjectName, on_delete=models.CASCADE,null=True)
cost_name = models.CharField('Cost Name', max_length=50)
total_budget = models.DecimalField('Total Budget', max_digits=9,decimal_places=2)
forms.py
class CreateCostForm(forms.ModelForm):
def __init__(self,project_id,*args, **kwargs):
super(CreateCostForm, self).__init__(*args, **kwargs)
self.fields['cost_name'].queryset = ProjectCost.objects.filter(project_name_id=project_id)
class meta:
model = ProjectCost
当我硬编码project_id的值时,如下所示:
self.fields['project_name'].queryset = ProjectCost.objects.filter(project_name_id=4) or
ProjectCost.objects.filter(project_name_id= 8),
我在表单上获得了正确的筛选选项。那么如何使项目id动态
我试过:
def __init__(self, *args, **kwargs):
project_id = kwargs.pop('project_id', None)
super(CreateCostForm, self).__init__(*args, **kwargs)
self.fields['cost_name'].queryset = ProjectCost.objects.filter(project_name_id=project_id)
但是对于'project_id'的值,它返回'None'。你知道怎么解决这个问题吗
谢谢。当您从
CreateView
进行子分类时,有一个方法调用将数据从视图发送到表单。就像这样覆盖它:
class YourView(CreateView):
...
def get_form_kwargs(self, *args, **kwargs):
form_kwargs = super(YourView, self).get_form_kwargs(*args, **kwargs)
form_kwargs['project_id'] = self.kwargs.get('project_id') # assuming you send the project_id through url ie path('project/<int:project_id>/create/', YourView.as_view())
return form_kwargs
我不是分类。我会尝试一下,然后告诉你。谢谢你的及时回复。谢谢,正是我想要的!
Class CreateCostForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
project_id = kwargs.pop('project_id', None)