2017-06-06 17 views
0

フィールドを持つCompoundsのテーブルがあり、これはNamesという別のテーブルにリンクされています。django-tables2のアクセサーフィールドに、オブジェクト自体の属性ではなくオブジェクトの属性を表示するにはどうすればよいですか?

私はジャンゴ-tables2とテーブルをレンダリングするとき、それはそれはname列でaspirinを言っていないという事実を除いてうまくまで見せて、それがName object言います。

models.py

class Compound(models.Model): 

    drug_id = models.AutoField(primary_key=True) 

    drug_name = models.ForeignKey(Name, db_column='drug_name', null=True, on_delete=models.PROTECT) 
    # for flagging problematic data 
    flag_id = models.ForeignKey(Flag, db_column='flag_id', null=True, on_delete=models.PROTECT) 
    # is a cocktail 
    is_combination = models.BooleanField() 

    class Meta: 
     db_table = 'compounds' 

tables.py

import django_tables2 as tables 
from .models import Compound 

class FimTable(tables.Table): 

    drug_name = tables.Column(accessor='name.name') 

    class Meta: 
     model = Compound 
     attrs = {'class': 'paleblue table table-condensed table-vertical-center'} 
     fields = ('drug_id', 'drug_name') 
     sequence = ('drug_id', 'drug_name') 
     order_by = ('drug_id') 

views.py

@csrf_protect 
@login_required # redirects to login page if user.is_active is false 
def render_fim_table(request): 

    table = FimTable(Compound.objects.all()) 

    table.paginate(page=request.GET.get('page', 1), per_page=20) 

    response = render(request, 'fim_table.html', {'table': table}) 
    return response 

結果:

The resulting table. Notice that it says "Name Object" instead of the name itself.

答えて

1

Nameオブジェクトに対して__str__メソッドを定義するだけで済みます。あなたが使用することもでき

class Name(models.Model): 
    ... 

    def __str__(self): 
     return self.name 
+0

ありがとうございました。正しい答えとしてマークすると、それができるようになります。 –

0

...

class Name(model.Model): 
     ... 
     def __unicode__(self): 
      return self.name 
+0

'__str__'と' __unicode__'の違いと、なぜどちらを使うのかについて詳しく説明できれば役に立ちます。 – Jieter

関連する問題