我遇到类似于this one的问题,但其中提出的解决方案对我不起作用。
views.py:
@login_required
def contract(request):
form = ContractorForm()
return render(request,'portal/main_form.html',{'form': form })
forms.py
class ContractorForm (forms.ModelForm):
def _init_(self, *args, **kwargs):
super(ContractorForm, self).__init__(*args, **kwargs)
self.fields['phone'].choices= [('123',1235),('256',1256),]
phone= forms.ChoiceField(choices=())
class Meta:
model = Contractor
fields = ['name','phone']
def con_phone(self, user):
return Phone.objects.filter(contractor__user = user)
我遇到的问题是手机字段在选择时没有任何选项,如果我反过来略微更改forms.py(如下所示),它按预期工作
class ContractorForm (forms.ModelForm):
phone= forms.ChoiceField(choices=[('123',1235),('256',1256),])
class Meta:
model = Contractor
fields = ['name','phone']
def _init_(self, *args, **kwargs):
super(ContractorForm, self).__init__(*args, **kwargs)
def con_phone(self, user):
return Phone.objects.filter(contractor__user = user)
我的问题是我打算将用户作为参数传递给构造函数,然后获取他的电话号码并将它们作为选项添加到表单中,所以我[至少不认为我可以]使用声明代码工作
我很确定我做的事情很傻(我对django来说还是新手),你们给我的任何帮助都会非常感激
答案 0 :(得分:1)
在视图中,您可以指定表单的phone
字段的查询集
假设您的Contractor
模型有一个名为phones
的字段,并假设它是从Contractor
到Phone
的一对多,即在Phone
您有
contractor = model.ForeignKey(Contractor, related_name='phones')
您可以将表单中的phone
字段更改为ModelChoiceField
,并在视图中执行以下操作
u = request.user
form.fields['phone'].queryset = u.phones.all()