Python Django-来自带有选项的模型的动态表单

Python Django-来自带有选项的模型的动态表单,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我正在尝试实现动态表单,它显示数据库选择中的一些选项。表格应显示给定律师id的案件名称(即“选项1”) 例如:用户选择ID为6的律师,并且该律师ID在LawyersSpec模型中有“选项1”和“选项2”。在表单中,我只希望显示“选项1”和“选项2”作为可能的选项。我怎样才能做到这一点 我尝试过在init中重写queryset的动态表单 def\uuuuu init\uuuuuuu(self,*args,律师id,**kwargs): super() 律师规范=律师规范.objects.filte

我正在尝试实现动态表单,它显示数据库选择中的一些选项。表格应显示给定律师id的案件名称(即“选项1”)

例如:用户选择ID为6的律师,并且该律师ID在LawyersSpec模型中有“选项1”和“选项2”。在表单中,我只希望显示“选项1”和“选项2”作为可能的选项。我怎样才能做到这一点

我尝试过在init中重写queryset的动态表单

def\uuuuu init\uuuuuuu(self,*args,律师id,**kwargs):
super()
律师规范=律师规范.objects.filter(律师id=律师id)
但它从数据库返回记录的全名,而不仅仅是选择值

型号.py

class LawyersSpec(models.Model):
律师id=models.ForeignKey('MyUser',on\u delete=models.PROTECT)
律师规范=模型.SmallIntegerField(选项=案例)
案例=(
(1,“选项1”),
(2,“选项2”),
(3,“选项3”),
(4,“选项4”),
)
编辑: 我只想在规格字段中显示选项(“选项1”、“选项2”…),这些选项可用于给定的律师id

forms.py

类makeAppointForm(forms.Form):
first_name=forms.CharField(必需=True)
last_name=forms.CharField(必需=True)
spec=forms.ChoiceField()

在表单的init方法中,重置
spec
字段的选项:

# after super().__init__
lawyer_specs = LawyersSpec.objects.filter(lawyer_id=lawyer_id)
choices = ((spec.lawyer_spec, dict(CASES)[spec.lawyer_spec]) for spec in lawyer_specs)
self.fields['spec'].choices = choices

别忘了从您的模型导入
案例
。在
LawyerSpec
类中有
CASES
会更容易,然后您可以只参考
LawyerSpec.CASES

如果表单字段是
ChoiceField
,只需使用
选项=…
初始化,在元组列表中,例如基于
LawyerSpec.objects.filter(lawyers\u id=lawyer\u id).values('lawyer_spec')
。但是,由于您没有显示表单,也没有显示要保存的值(这与您显示的值不同,因此,
选项的元组列表
),因此在我们的回答中很难更具体。我添加了forms.py,基本上我希望精确显示案例中的值(“选项1”等)谢谢你!它工作了,但现在我在保存表单时遇到了问题-它总是无效的。如何在表单中保存所选规范?问题是,您显示了一个
表单
,它没有
保存()
,那么您要保存什么?因此,也许可以打开一个新问题,向我们展示您的完整代码。没有错误,表单无效,因为字段规范为空。如果form.is\u valid()为False,则form.errors不为空。在这种情况下,总是有表单错误。您应该始终在模板
{{form.errors}}
中显示它们。您可能是说没有服务器错误,这是正确的(状态200),您的服务器只是在您的模板中呈现带有错误的表单。在我的模板中,我有{form.errors}和{form.non_field_errors},但它没有显示任何内容