Python Django 表单 多选 HTML 输出
我想在Django表单中输出我模型里的描述字段,但一直没成功。
我搜索了很久也没找到需要的答案,希望能在这里问问。
下面是我的模型、表单、模板和模板输出的内容。我把内容简化了一下,以便让这个帖子更简洁。
我正在这个项目中处理视图部分,所以模型是别人设计的,我也没法去改动它。
模型:
1)
from django.db import models
class Project(models.Model):
description = models.TextField(blank = True)
name = models.CharField(max_length = 255, blank = True)
def __unicode__(self):
""" String representation of projects. """
return unicode(self.name)
2)
from django.db import models
class Share(models.Model):
description = models.TextField
last_access = models.DateTimeField(auto_now = True)
location = models.URLField(verify_exists = False)
project = models.ForeignKey('Project', related_name = 'shares')
def __unicode__(self):
return unicode(self.location)
表单:
from django import forms
from models import Share
class ExportForm(forms.Form):
ps = forms.ModelMultipleChoiceField(queryset=Share.objects.filter(project=1),widget=forms.SelectMultiple())
视图:
form = ExportForm()
模板:
我有这个代码来输出多个选择框:
{{ form.ps }}
模板输出:
<select multiple="multiple" name="ps" id="id_ps">
<option value="11">Share object </option>
<option value="10">Share object </option>
</select>
我尝试了很多方法,但似乎无法把“描述”字段放进去,而是显示了“共享对象”。
任何建议都非常感谢。
谢谢!
1 个回答
1
最简单的方法是修改Share模型中的__unicode__
方法,让它返回描述信息而不是位置。不过,因为你说不能改动这个模型,所以你需要创建一个新的类,继承ModelMultipleChoiceField
,并重写label_from_instance
这个方法。
class MyModelMultipleChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.description
这个内容在文档中有详细说明。