損益分岐点と利益を計算し、それぞれをデータベースに保存する方法
損益分岐点と利益を計算し、それぞれをデータベースに保存する方法を以下に示します。
- モデルの変更:
RakutenPriceResultモデルにprofitフィールドを追加し、計算結果を保存するための準備をします。python from django.db import models class RakutenPriceResult(models.Model): original_product_code = models.CharField(max_length=100, primary_key=True) # 自社品番 min_price = models.IntegerField(null=True, blank=True) # 最安価格 min_shopCode = models.CharField(max_length=100, null=True, blank=True) # 最安価格のショップコード next_min_price = models.IntegerField(null=True, blank=True) # 最安の次の価格 next_min_shopCode = models.CharField(max_length=100, null=True, blank=True) # 最安価格の次のショップコード per_low_own_price = models.IntegerField(null=True, blank=True) # 自社のX%・最安で暫定的な最安価格 per_high_own_price = models.IntegerField(null=True, blank=True) # 自社のX%・高い暫定的な最安価格 yen_low_own_price = models.IntegerField(null=True, blank=True) # 自社のX円・最安で暫定的な最安価格 yen_high_own_price = models.IntegerField(null=True, blank=True) # 自社のX円・高い暫定的な最安価格 cost_price = models.IntegerField(null=True, blank=True) # 原価 break_even_point = models.FloatField(null=True, blank=True) # 商品単位の限界利益における損益分岐点 result_price = models.IntegerField(null=True, blank=True) # アップロードする価格 profit = models.FloatField(null=True, blank=True) # 利益 def __str__(self): return f"original_product_code: {self.original_product_code}, " f"min_price: {self.min_price}, " f"min_shopCode: {self.min_shopCode}, " f"next_min_price: {self.next_min_price}, " f"next_min_shopCode: {self.next_min_shopCode}, " f"per_low_own_price: {self.per_low_own_price}, " f"per_high_own_price: {self.per_high_own_price}, " f"yen_low_own_price: {self.yen_low_own_price}, " f"yen_high_own_price: {self.yen_high_own_price}, " f"cost_price: {self.cost_price}, " f"result_price: {self.result_price}, " f"break_even_point: {self.break_even_point}, " f"profit: {self.profit}" - 利益と損益分岐点を計算して保存する関数:
add_break_even_point関数内で、利益と損益分岐点を計算し、それぞれの値をモデルインスタンスに保存します。python import pandas as pd from .models import RakutenPriceResult def add_break_even_point(): # 損益が0円を登録(それをベースにして、赤字、黒字の計算に使う) import_data = list(RakutenPriceResult.objects.values_list('original_product_code', 'cost_price', 'yen_low_own_price')) # DataFrameを作成 df = pd.DataFrame(import_data, columns=['original_product_code', 'cost_price', 'yen_low_own_price']) shipping = 500 # 送料 sizai = 50 # 梱包資材 zinkenhi = 0 # 商品別人件費 mall_fee_rate = 0.09 # モール手数料率 # 利益を計算する関数を定義 def calculate_profit(row): revenue = row['yen_low_own_price'] cost = row['cost_price'] profit = revenue - cost - (revenue * mall_fee_rate) - shipping - sizai - zinkenhi return profit # 各行の利益を計算して新しい列に追加 df['profit'] = df.apply(calculate_profit, axis=1) # 損益分岐点を計算してモデルに保存 df['break_even_point'] = (df['cost_price'] + shipping + sizai + zinkenhi) / (1 - mall_fee_rate) # モデルに計算結果を保存 for index, row in df.iterrows(): product_code = row['original_product_code'] break_even_point = row['break_even_point'] profit = row['profit'] # プライマリーキーでモデルインスタンスを取得して更新 instance = RakutenPriceResult.objects.get(original_product_code=product_code) instance.break_even_point = break_even_point instance.profit = profit instance.save() print("損益分岐点と利益を計算して保存しました。") - マイグレーションを作成して適用する:
モデルに変更が加えられたので、マイグレーションを作成し、それをデータベースに適用します。bash python manage.py makemigrations python manage.py migrate - 関数を実行する:
Djangoの管理コマンドを使用して関数を実行します。bash python manage.py shell >>> from your_app_name.file_name import add_break_even_point >>> add_break_even_point()
これで、各商品の利益と損益分岐点が計算され、それぞれの値がデータベースに保存されます。適切にモデルと関数を設定することで、自動的に計算と保存が行われるようになります。

ディスカッション
コメント一覧
まだ、コメントがありません