Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中,在表单中,如何动态选择要在ModelChoiceField中显示的自定义模型字段?_Django_Forms_Django Forms - Fatal编程技术网

在Django中,在表单中,如何动态选择要在ModelChoiceField中显示的自定义模型字段?

在Django中,在表单中,如何动态选择要在ModelChoiceField中显示的自定义模型字段?,django,forms,django-forms,Django,Forms,Django Forms,我必须管理不同语言的记录,由注册用户在线编辑内容,而不使用Django管理工具 表单必须以每种语言本地化 由于语言的数量是固定的,我决定在模型中用不同的字段处理不同的语言,字段的名称由语言代码完成,参见下面的示例 #models.py 类MyAttribute(models.Model): name_en=models.CharField()#英语名称 name_es=models.CharField()#西班牙语名称 name_fr=models.CharField()#法语名称 field2

我必须管理不同语言的记录,由注册用户在线编辑内容,而不使用Django管理工具

表单必须以每种语言本地化

由于语言的数量是固定的,我决定在模型中用不同的字段处理不同的语言,字段的名称由语言代码完成,参见下面的示例

#models.py
类MyAttribute(models.Model):
name_en=models.CharField()#英语名称
name_es=models.CharField()#西班牙语名称
name_fr=models.CharField()#法语名称
field2_en=models.CharField()#英语字段2
field2_es=models.CharField()#西班牙语字段2
field2_fr=models.CharField()#法语字段2
类别MyGroup(models.Model):
name_en=models.CharField()#英语名称
name_es=models.CharField()#西班牙语名称
name_fr=models.CharField()#法语名称
myattribute=models.ForeignKey(myattribute)
我已经创建了一个自定义标记来处理模板中本地化内容的显示,它运行良好

{%localized\u value我的组名当前\u语言%}
现在,我需要设置一个表单来编辑MyGroup对象,为myattribute字段设置一个models.modelcoocefield。我的理解是,默认情况下,这将始终在模型中显示由label_从_instance()生成的相同字符串,并且无法在其中使用request.LANGUAGE_代码

那么我的问题是:如何能够动态选择要在我的表单中显示的好名字\u语言\u代码字段?

实现可以类似于:

#views.py
form.fields[“myattribute”]。相关字段=eval('name'+语言代码)

#template.html
{{form.myattribute language_code}
有什么想法吗


顺便说一句,使用Django 1.6,如果你想翻译一个被称为verbose_的名字,最好使用Django国际化


以下链接中的文档:

我终于找到了一种方法,使用Beau Simensen所描述的工作:他修改了ModelChoiceField以返回(值、标签、模型)而不是(值、标签)

到目前为止,对我来说似乎还行

来自django.forms导入模型的

从django.forms.fields导入ChoiceField
类高级ModelChoiceInterator(models.ModelChoiceInterator):
def选择(自身、obj):
返回(self.field.prepare_值(obj)、self.field.label_from_实例(obj)、obj)
class AdvancedModelChoiceField(models.ModelChoiceField):
定义获取选项(自我):
如果hasattr(自我,“U选择”):
返回自我
返回AdvancedModelChoiceInterator(自身)
选项=属性(\u获取\u选项,ChoiceField.\u设置\u选项)

感谢您的快速反馈。花了一些时间在Django的文档上,并找到了要本地化的信息:模板中的文本、模型字段的名称和帮助文本、切换会话语言的方法。。。但没有找到为同一字段管理不同值的方法。I18N上有一些应用程序,但对我来说,它们看起来有些过头了。我的目标是动态切换用于呈现ModelChoiceFieldverbose_调用的外键对象的字段。name允许您转换字段的名称,但不能转换字段的值。Django doc关于表单的摘录:“[…]此外,每个生成的表单字段的属性设置如下:•如果模型字段为blank=True,则表单字段上的required设置为False。否则,required=True。•表单字段的标签设置为模型字段的详细名称,第一个字符大写[…]”.