2010-11-24 10 views
2

J'essaie de sortir le champ de description de mon modèle dans une forme django sans joie. Après avoir cherché autour et ne pas trouver ce dont j'ai besoin J'espère que je peux demander ici.Python Django Forms Multiple Sélectionnez HTML Ouput

Voici mes modèles, formulaire, modèle et sortie de modèle. Je me suis abstenu d'aider à rendre ce post concis.

Je travaille sur la vue dans ce projet, donc le modèle a été conçu par quelqu'un d'autre et je ne peux pas vraiment le changer.

MODÈLES:

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) 

FORMULAIRE:

from django import forms 
from models import Share 

class ExportForm(forms.Form): 
    ps = forms.ModelMultipleChoiceField(queryset=Share.objects.filter(project=1),widget=forms.SelectMultiple()) 

VIEW:

form = ExportForm() 

TEMPLATE:

J'ai ceci à ouput multiples sélectionnez bos:

{{ form.ps }} 

TEMPLATE SORTIE:

<select multiple="multiple" name="ps" id="id_ps"> 
<option value="11">Share object </option> 
<option value="10">Share object </option> 
</select> 

J'ai essayé plusieurs choses de la recherche autour, mais peut » t semble être en mesure de rendre le champ 'description' plutôt que 'Share object'

Tout conseil très apprécié.

Merci!

Répondre

1

La meilleure façon de le faire est de changer la méthode __unicode__ du modèle de l'action pour retourner la description au lieu de l'emplacement, mais puisque vous dites que vous ne pouvez pas changer le modèle que vous aurez besoin de sous-classe ModelMultipleChoiceField et remplacer la méthode label_from_instance.

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

Ceci est expliqué in the documentation.

+0

Selon la sortie, il ne semble même pas que la méthode '__unicode__' affichée soit appelée. Si c'était le cas, il y aurait des URL dans les balises '

+0

Bien sûr, cela fonctionnerait probablement quel que soit le + 1 – aaronasterling

+0

Merci .. cela fonctionne parfaitement. – Jaocb