Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 除_str以外的显示字段___Django_Django Forms_Modelchoicefield - Fatal编程技术网

Django 除_str以外的显示字段__

Django 除_str以外的显示字段__,django,django-forms,modelchoicefield,Django,Django Forms,Modelchoicefield,我试图显示以下模型中的版本字段,而不是默认的str,即field2\u名称: 注意:这个SO链接可能超出了我的需要,但我不是100%确定。我试图实现这一点,但没有成功 还要注意的是,我在上尝试了这个示例,但没有成功 型号(通用名称): 表格: 这是可行的-它按预期返回field2_名称 如何返回版本-最简单的方法是什么 非常感谢您的帮助或指导。如果我没有弄错您的问题,您可以更改对象字符串的表示形式 def __str__(self): return str(self.version) 然后

我试图显示以下模型中的版本字段,而不是默认的str,即field2\u名称:

注意:这个SO链接可能超出了我的需要,但我不是100%确定。我试图实现这一点,但没有成功

还要注意的是,我在上尝试了这个示例,但没有成功

型号(通用名称):

表格:

这是可行的-它按预期返回field2_名称

如何返回版本-最简单的方法是什么


非常感谢您的帮助或指导。

如果我没有弄错您的问题,您可以更改对象字符串的表示形式

def __str__(self):
  return str(self.version)

然后,您可以继承ModelChoiceField并从_实例方法重写标签_

甚至像这样给它打补丁

self.fields['field_name'].label_from_instance = self.label_from_instance

@staticmethod
def label_from_instance(self):
    return str(self.value)
从:

模型的
\uuuu str\uuuu
\uuuuu unicode\uuuu
在Python 2上)方法将被调用,以生成用于字段选择的对象的字符串表示形式;若要提供自定义表示,请将
modelcoocefield
子类化,并覆盖
label\u from\u instance
。此方法将接收一个模型对象,并应返回一个适合表示该对象的字符串。例如:

from django.forms import ModelChoiceField

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "My Object #%i" % obj.id

感谢您的回复:)很遗憾,我无法更改此特定模型的str。然后您可以继承ModelChoiceField并覆盖来自_实例方法的label_谢谢-我今天将进一步查看来自_实例的label_和您的想法。结果证明我能够将str更改为我需要的内容-它尚未被使用。我将不得不把这件事放在次要位置,因为我相信这件事在将来是需要的。给了你+1。@iklinac有没有一种方法可以在一行中编写monkey patch方法?例如,将
label\u from\u instance
例程合并到
self.fields['field\u name']的右侧。label\u from\u instance=self。label\u from\u instance
感谢您的回复。我尝试了这个版本(见第一个SO链接),但无法让它工作。但也有可能是我做得不对。今天我将看一看这个具体的例子。事实上,我并不十分清楚这个例子中到底发生了什么,但我会“深入研究”。)给你+1-请看我对iklinac的评论。
self.fields['field_name'].label_from_instance = self.label_from_instance

@staticmethod
def label_from_instance(self):
    return str(self.value)
from django.forms import ModelChoiceField

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "My Object #%i" % obj.id