2010-11-24 7 views
2

私のモデル の説明フィールドをdjango形式で喜んで出力しようとしています。Python Djangoフォーム複数のHTML出力を選択

私が必要としているものを探し回って、見つけなかったら 私はここで聞くことができます。

ここに私のモデル、フォーム、テンプレート、およびテンプレート出力があります。 私はこの投稿を簡潔にするのを躊躇しました。

このプロジェクトのビューでは、 というモデルが設計されており、実際には変更できません。

MODELS:

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) 

FORM:

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:

{{ form.ps }} 

TEMPLATE出力::私はことができますが、「周りの検索からいくつかのことを試してみた

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

私は複数選択BOSをouputをするためにこれを持って

t は、 '共有オブジェクト'ではなく、 'description'フィールドを作成できるようです。

何かアドバイスをいただければ幸いです。

ありがとうございます!

答えて

1

これを行う最も簡単な方法ではなく、場所の説明を返すように共有モデルの__unicode__方法を変更することですが、あなたはモデルを変更することはできませんと言うので、あなたはModelMultipleChoiceFieldをサブクラス化しlabel_from_instanceメソッドをオーバーライドする必要があります。

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

これはin the documentationを説明しています。

+0

出力に基づいて、表示された '__unicode__'メソッドが呼び出されているように見えません。もしそうなら、 '

+0

もちろんこれに関係なく動作するでしょう+1 – aaronasterling

+0

ありがとう..これは完璧に動作します。ジャンゴインポートフォームから – Jaocb

関連する問題