【Django+Python3.6+Win】家計簿アプリを作る Part.002

早速ですが、昨日からアプリ作成始めたので、進捗兼自分用メモ。

なお、単なる家計簿アプリではなく、制度会計・簿記的なアプリを目指している。

各月の実績をPLやBSベースで表示させたい。

なので、仕訳の概念などを取り入れている。

 

また、プログラム関連の知識は初心者に毛が生えた程度のレベルなので生暖かい目で見守ってください。。。

6月9日

Djangoの公式チュートリアルを読みつつ・・・、

Created two models:
・AccountMaster(勘定科目マスタ)
・JE(仕訳保存用、仕訳日記帳的なものを想定している。)

templateの作成は、下記の記事を参考にしました。
https://qiita.com/kaki_k/items/6e17597804437ef170ae

6月10日

昨日作成したモデルはそれぞれが独立したモデルであった。
しかし、仕訳格納モデルの借方、貸方勘定科目は、勘定科目マスタモデルと紐づけたい。

そのため、仕訳格納モデルの一部にForeignKeyを設定。
一度DBの基礎的な設計の仕方を学んだ方がいいんだろうなぁ…。

コメントアウトしてあるところは、昨日作成のモデルから削った部分。

model.py
class AccountMaster(models.Model):
    account_code = models.IntegerField(default = 0)
    account_name = models.CharField(max_length=20)
    sub_account_code = models.IntegerField(default = 0)
    sub_account_name = models.CharField(max_length=20)
    account_type = models.CharField(max_length=20)
    optional = models.CharField(max_length=20)

    # define the display name in admin below
    def __str__(self):
        return u'%s' % (self.account_name)

class JE(models.Model):
    je_date = models.DateTimeField(default = timezone.now())
    # debit_account_code = models.IntegerField(default = 0)
    # debit_account_name = models.CharField(max_length=20)
    # debit_sub_account_code = models.IntegerField(default = 0)
    # debit_sub_account_name = models.CharField(max_length=20)
    debit_account_master = models.ForeignKey('AccountMaster',
                                            related_name='debit_account_master',
                                            on_delete=models.CASCADE)
    debit_description_first = models.CharField(max_length=50)
    debit_description_second = models.CharField(max_length=50)
    debit_amount = models.IntegerField(default = 0)
    # credit_account_code = models.IntegerField(default = 0)
    # credit_account_name = models.CharField(max_length=20)
    # credit_sub_account_code = models.IntegerField(default = 0)
    # credit_sub_account_name = models.CharField(max_length=20)
    credit_account_master = models.ForeignKey('AccountMaster',
                                            related_name='credit_account_master',
                                            on_delete=models.CASCADE)
    credit_description_first = models.CharField(max_length=50)
    credit_description_second = models.CharField(max_length=50)
    credit_amount = models.IntegerField(default = 0)

 

また、Formをプルダウンなどに変えた。
下記サイトが大いに参考になった。
https://eiry.bitbucket.io/tutorials/guest_board/models.html

forms.py
class JE_pulldown_Form(ModelForm):
    class Meta:
        model = JE
        fields = ('debit_account_master', 
                  'debit_description_first',
                  'debit_description_second',
                  'debit_amount',
                  'credit_account_master', 
                  'credit_description_first',
                  'credit_description_second',
                  'credit_amount'
                  )
        widgets = {
            'debit_account_master': forms.Select, 
            'debit_description_first': forms.TextInput(attrs={'size': 40}),
            'debit_description_second': forms.TextInput(attrs={'size': 40}),
            'credit_account_master': forms.Select, 
            'credit_description_first': forms.TextInput(attrs={'size': 40}),
            'credit_description_second': forms.TextInput(attrs={'size': 40}),
            }

仕訳入力画面はこんな感じ

f:id:h-nona-integral:20180610215912p:plain

 

次はJE modelから勘定科目別の金額集計を考えよう。

 

書いていて思ったが、完全に自分用のメモ書きとなっている。

 

以上