質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1671閲覧

Djangoにて、売り上げ前日比を算出し、伸比が多い順に並び替えができません。

HiroUchi

総合スコア7

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/02/09 12:51

編集2019/02/09 13:02

件名の件でございますが、下記に質問を記載しております。
以下のことを実現させたいのですが、現在わかっておりません。
恐れ入りますが、力添えをいただけますと幸いです。

■質問内容

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

■商品テーブル

IDname
1PC
2テレビ
3洗濯機
4掃除機

■売上テーブル

IDproduct_idsales_qsales_at
1p1102019-01-05
2p1152019-01-06
3p252019-01-05
4p2152019-01-06
5p382019-01-05
6p3242019-01-06
7p492019-01-05
8p4182019-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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おおよそ以下のアプローチで実現できるのではないかと思いますがいかがでしょうか。

  • a) 前日比の算出 → Sales のテーブル同士を sales_at を 1 日ずらして JOIN し差分を計算
  • b) 順位の取得 → MySQL でソートランクを表示する定番の方法を使う

a) には例えば次のページが

b) には次のページが参考になります。

Django でどのように書くのがよいのかまでは追い切れないのでそのあたりはお調べになっていただければと思いますが、ご参考になるでしょうか。

投稿2019/02/10 02:39

gh640

総合スコア1407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HiroUchi

2019/02/11 13:26

ありがとうございます。参考ページの下、実装することができました。
gh640

2019/02/12 13:12

そうですか。ご丁寧にコメントいただきありがとうございます。よかったです :D
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問