2017-03-05 10 views
2

私のモデルはForeignKeyで構成され、generics.DetailViewを使用してdjangoビューでオブジェクトの詳細を表示しています。IDではなくテンプレートの外部キーのUnicode値を取得

に、mymodel

class MyModel(models.Model): 
    myField = models.ForeignKey(...) 

    def get_fields(self): 
     # called by the template 
     return [(field.verbose_name, field.value_to_string(self)) for field in type(self)._meta.fields] 

MYVIEW

class Detail(DetailView): 
    model = MyModel 
    template_name = 'path/to/template.html' 

    def get_context_data(self, **kwargs): 
     context = super(Detail, self).get_context_data(**kwargs) 
     # do something 
     return context 

そして

{% for field, value in object.get_fields %} 
      <tr> 
       <th>{{ field }}</th> 
       <td>{{ value }}</td> 
      </tr> 
{% endfor %} 

テンプレートのレンダリング今MyTemplateには、私が何を得るidいうより__unicode__表現です。同じ問題がChoiceFieldにも見られます(ラベルではなく値を取得します)。

私の質問は、実際の値ではなくラベルやユニコード表現をどうすれば得ることができるのですか?

答えて

0

外国人の場合、getattr(self, field.name)が機能しているようです。だから、:

ChoiceFieldsについては
class MyModel(models.Model): 
    myField = models.ForeignKey(...) 

    def get_fields(self): 
     # called by the template 
     return [(field.verbose_name, unicode(getattr(self, field.name))) for field in type(self)._meta.fields] 

、ラベルはself.get_<field_name>_display()として取得することができます。だから、一緒に、おそらく何かのような

class MyModel(models.Model): 
    myField = models.ForeignKey(...) 

    def get_field_value(self, field): 
     if isinstance(field, models.CharField) and field.choices: 
      return getattr(self, 'get_{}_display'.format(field.name))() 
     return unicode(getattr(self, field.name)) 

    def get_fields(self): 
     # called by the template 
     return [(field.verbose_name, self.get_field_value(field)) for field in type(self)._meta.fields] 
+0

ありがとう。 – AnnShress

関連する問題