我有2个表单,第一个表单有一个下拉菜单,允许用户使用驱动程序:Bob,Jim,Jack ....假设用户选择Bob并保存。
class RouteUpdate(forms.ModelForm):
class Meta:
model= Route
fields= [
'route',
'driver',
...
在第二种形式中,我需要显示Bob,但该字段不能编辑。 Readonly不是一个选项,因为这允许查看(如果不是选择)其他选项。
禁用该字段有效,但仍会将其呈现为下拉列表(已禁用)。
有关如何解决此问题的任何建议。如果只是简单的方法,我会很高兴 渲染" Bob作为模板中的变量而不是表单字段。或者,我如何格式化该字段?感谢。
答案 0 :(得分:0)
正如你在Field文档中看到的那样,你可以做你想做的事:
在您的情况下,您可以在课程中添加一个字段
class RouteUpdate(forms.ModelForm):
the_driver = forms.CharField(required=False, label='The Driver', disabled=True)
def __init__(self, *args, **kwargs):
super(RouteUpdate, self).__init__(*args, **kwargs)
# here you can decide the name of your driver based on other fields/model
self.fields['the_driver'].initial = 'The name of the driver'
class Meta:
model= Route
fields= [
'route',
...
如果需要将值传递给表单以构造驱动程序的名称,则可以在init上执行此操作。在您的视图中,获取request.user并从中获取名称并将其传递
class RouteUpdate(forms.ModelForm):
the_driver = forms.CharField(required=False, label='The Driver', disabled=True)
def __init__(self, username=None, *args, **kwargs):
# the super is called without username
super(RouteUpdate, self).__init__(*args, **kwargs)
username = username or 'default name'
self.fields['the_driver'].initial = username
class Meta:
model= Route
fields= [
'route',
...