我正在尝试从我的模型中输出描述字段 以 django 形式没有喜悦。
四处寻找并没有找到我需要的东西 希望可以在这里提问。
这是我的模型、表单、模板和模板输出。 为了让这篇文章更加简洁,我进行了缩略。
我正在处理这个项目中的 View ,所以模型 已由其他人设计,我无法真正更改它。
模型:
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()
模板:
我用这个来输出多个选择 bos:
{{ form.ps }}
模板输出:
<select multiple="multiple" name="ps" id="id_ps">
<option value="11">Share object </option>
<option value="10">Share object </option>
</select>
我已经通过搜索尝试了几种方法,但不能 似乎能够在其中创建“描述”字段而不是“共享对象”
非常感谢任何建议。
谢谢!
请您参考如下方法:
最简单的方法是更改 Share 模型的 __unicode__ 方法以返回描述而不是位置,但是既然你说你不能更改模型,你将需要子类化 ModelMultipleChoiceField 并覆盖 label_from_instance 方法。
class MyModelMultipleChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.description
这解释了in the documentation .
