Python Django Forms множественный выбор HTML Ouput - PullRequest
2 голосов
/ 24 ноября 2010

Я пытаюсь вывести поле описания из моей модели в форме джанго без радости.

После поиска вокруг и не найти то, что мне нужно Я надеюсь, что могу спросить здесь.

Вот мои модели, форма, шаблон и шаблон вывода. Я позволил сделать этот пост кратким.

Я работаю над представлением в этом проекте, поэтому модель был разработан кем-то другим, и я не могу его изменить.

МОДЕЛЬ:

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>

Я пробовал несколько вещей из поиска, но не могу кажется, что можно сделать поле «описание» вместо «Поделиться объектом»

Любой совет высоко ценится.

Спасибо!

1 Ответ

1 голос
/ 24 ноября 2010

Самый простой способ сделать это - изменить метод __unicode__ модели Share, чтобы он возвращал описание вместо местоположения, но, поскольку вы говорите, что не можете изменить модель, вам нужно будет создать подкласс ModelMultipleChoiceField и переопределитьlabel_from_instance метод.

class MyModelMultipleChoiceField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return obj.description

Это объясняется в документации .

...