Skip to main content
 首页 » 编程设计

Python Django 表单多选 HTML 输出

2025年05月04日41xiaohuochai

我正在尝试从我的模型中输出描述字段 以 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 .