件名の件でございますが、下記に質問を記載しております。
以下のことを実現させたいのですが、現在わかっておりません。
恐れ入りますが、力添えをいただけますと幸いです。
■質問内容
Djangoにて、以下のように商品管理のテーブルと、商品の日毎の売上のテーブルを作っております。
単純に、特定の日の売り上げ順や、日付順につきましては、view.pyに記載して、テンプレートに渡し表示はできるのですが、
前日比を算出し、売上伸比順や、順位を表示させる方法が、どのようにしたらよいかわかっておりません。
なお、特定の日の商品の売り上げ順を表示させている時、1位 2位と表示させているのですが、その手法を、現在「{{forloop.counter}}位」
としております。この場合、商品を全部表示させている場合はよいのですが、各商品の詳細ページに飛んだ際、順位を出すことができません。
適切な方法がございましたら、教示いただけますと幸いです。
Django
1■ models.py 2 class Product(models.Model): 3 name = models.CharField(verbose_name='商品名', max_length=300) 4 created_at = models.DateTimeField(verbose_name='登録日', default=now) 5 6 class Sales(models.Model): 7 product = models.ForeignKey( 8 Product, verbose_name=u'商品名', on_delete=models.PROTECT, null=True 9 ) 10 sales_q = models.IntegerField(verbose_name='売上個数', default=0) 11 sales_at = models.DateField(verbose_name='日時', default=now) 12 13
単純に特定の日にちの売り上げ順の場合ですと、以下のビューをテンプレートにてfor文で
1つずつ表示させています。
Django
1■view.py 2from django.views.generic import ListView 3import datetime 4today = datetime.date.today() 5 6class ProductList(ListView): 7 model = Sales 8 template_name = 'products/sales_list.html' 9 10 def get_queryset(self): 11 queryset = Sales.objects.filter( 12 product_at=today 13 ).order_by('-sales_q') 14 return queryset 15
■商品テーブル
ID | name |
---|---|
1 | PC |
2 | テレビ |
3 | 洗濯機 |
4 | 掃除機 |
■売上テーブル
ID | product_id | sales_q | sales_at |
---|---|---|---|
1 | p1 | 10 | 2019-01-05 |
2 | p1 | 15 | 2019-01-06 |
3 | p2 | 5 | 2019-01-05 |
4 | p2 | 15 | 2019-01-06 |
5 | p3 | 8 | 2019-01-05 |
6 | p3 | 24 | 2019-01-06 |
7 | p4 | 9 | 2019-01-05 |
8 | p4 | 18 | 2019-01-06 |
■実現したいこと
▼売上の伸比順
1位 洗濯機 売上:24個 前日比+16
2位 PC 売上:15個 前日比+10
3位 掃除機 売上:18個 前日比+9
4位 テレビ 売上:15個 前日比+5
■バージョン
mysql(8.0.12)
python(3.7.1)
Django(2.1)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/11 13:26
2019/02/12 13:12