hel*_*013 14 html python forms django model
我试图创建一个django表单,我的一个字段包含一个ModelChoiceField
class FooForm(forms.Form):
person = forms.ModelChoiceField(queryset=Person.objects.filter(is_active=True).order_by('id'), required=False)
age = forms.IntegerField(min_value=18, max_value=99, required=False)
Run Code Online (Sandbox Code Playgroud)
当我尝试上面的代码时,它返回的是html输出
<option value="1">Person object</option>
Run Code Online (Sandbox Code Playgroud)
在我的人物模型上我有字段"id,fname,lname,is_active".是否可以指定我的下拉选项将使用"id"作为值并使用"lname"作为标签?预期的html应该是
<option value="1">My Last Name</option>
Run Code Online (Sandbox Code Playgroud)
提前致谢!
Fog*_*ird 28
来自Django文档:
https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ModelChoiceField
将调用模型的
__unicode__(__str__在Python 3上)方法来生成对象的字符串表示,以便在字段的选择中使用; 提供自定义表示,子类ModelChoiceField和覆盖label_from_instance.此方法将接收模型对象,并应返回适合表示它的字符串.例如:Run Code Online (Sandbox Code Playgroud)from django.forms import ModelChoiceField class MyModelChoiceField(ModelChoiceField): def label_from_instance(self, obj): return "My Object #%i" % obj.id
因此,您可以这样做,或覆盖__str__您的模型类以返回姓氏.
Tho*_*ner 26
你可以在Form的init中添加对label_from_instance的调用,即
通过添加类似的东西
class TestForm(ModelForm):
def __init__(self, *args, **kwargs):
super(TestForm, self).__init__(*args, **kwargs)
self.fields['field_name'].label_from_instance = self.label_from_instance
@staticmethod
def label_from_instance(obj):
return "My Field name %s" % obj.name
Run Code Online (Sandbox Code Playgroud)
在您的Person模型中添加:
def __unicode__(self):
return u'{0}'.format(self.lname)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Python 3,那么请定义__str__而不是__unicode__.
def __str__(self):
return u'{0}'.format(self.lname)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12288 次 |
| 最近记录: |