2016-12-06 1 views
0

モデルプロパティでテーブルをソートできません。 django-tables2はどのフィールドを処理するのか分かっていますが、動作しません。モデルのプロパティ(アクセサセット)でテーブルをソートできません

これはテーブルです:

class Scan(models.Model): 
    occurence = models.ForeignKey('Occurence', related_name='scans') 
    datetime = models.DateTimeField() 
    price = models.DecimalField(max_digits=20,decimal_places=2,null=True,blank=True,verbose_name='Price') 
    valid = models.BooleanField(default=True,verbose_name='Valid') 

    def __unicode__(self): 
     return u'{} {} {} {}'.format(self.occurence, self.datetime, self.price, u'OK' if self.valid else 'NOK') 


    @property 
    def date(self): 
     return self.datetime.date() 

    @property 
    def time(self): 
     return self.datetime.time() 

ビュー:

class ScansTable(tables.Table): 
    site = tables.columns.Column(accessor='occurence.site', verbose_name='Site') 
    url = tables.columns.TemplateColumn("""<a href="{{ record.occurence.url }}">{{ record.occurence.url|truncatechars:20 }}</a>""", 
             accessor='occurence.url', verbose_name='Url') 
    price = tables.columns.TemplateColumn(u"""{{ record.price }} €""") 
    date = tables.columns.Column(accessor='date',order_by='date') 
    time = tables.columns.Column(accessor='time',order_by='time') 
    class Meta: 
     model = Scan 
     fields = ('date', 'time', 'site', 'url', 'valid', 'price') 
     attrs = {'id': 'cans_table', 
       'class': 'table',} 

これはスキャンモデルです

def scans(request): 
    ... 
    scans = Scan.objects.filter(occurence__product=product) 

    scans_table = ScansTable(scans) 
    RequestConfig(request).configure(scans_table) 
    scans_table.paginate(page=request.GET.get('page', 1), per_page=50) 

    return render(request,"dashboard_app/scans.html",context={'scans_table':scans_table}) 

表Iにはない時に適切にrenderdされていますそれを並べ替える。

フィールドにキーワードu'timeを解決できません。たとえば、時間をクリックすると、次の結果が返されます。選択肢は以下のとおりです。問題がある場合、日時、 グループ、ID、出現、occurence_id、価格、有効な

あなたは知っていますか?

答えて

0

どのようなタイプの製品ですか? Occurenceモデルを表示し、ビュー内の値を表示する

+0

私は理解していない...製品がモデルであります複数のOccurenceオブジェクトを持つことができます。 –

+0

これは、商品のタイプとは何ですか? –

0

モデルの定義済みのプロパティ/メソッドは、クエリセット内のソート/フィルタリングに使用できないようです。私はそれがなぜその理由であるか完全に理解していません。解決策は、Scanモデルでは、datetimeをプロパティとして定義しないで、代わりにデータを入力するために使用されるクエリセットに注釈を付けることです。

from django.db import models 

def scans(request): 
    ... 
    scans = Scan.objects.filter(occurence__product=product).annotate(
     date=models.F('datetime__date'), 
     time=models.F('datetime__time') 
    ) 
    ... 

フィールド参照については、hereのマニュアルを参照してください。また、あなたはそれらのフィールドのためにtables特定の列を使用することができます - あなたはアクセサを定義する必要はありませんのでご注意今の結果は、クエリセットに既にある:

class ScansTable(tables.Table): 
    ... 
    date = tables.DateColumn() 
    time = tables.TimeColumn() 
    ... 
関連する問題