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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1005閲覧

Django簡易アプリケーションで複数の値を使っての四則演算がわからないです

masa530

総合スコア5

Django

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/14 00:13

こんにちは、Python, Djangoビギナーの者です。
この度ウェブアプリケーションを作っているのですが、そこで複数の四則演算を実装したいと思っています。

models.py

1from django.db import models 2from django.contrib.auth.models import User 3from django.core.validators import MaxValueValidator, MinValueValidator 4# Create your models here. 5class Food(models.Model): 6 user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True) 7 name = models.CharField(max_length=200) 8 kcal = models.PositiveSmallIntegerField() 9 protein = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)]) 10 fat = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)]) 11 carb = models.DecimalField(max_digits=4, decimal_places=1, blank=True, null=True, default=0.0, validators=[MaxValueValidator(999.9), MinValueValidator(0.0)]) 12 description = models.TextField(null=True, blank=True) 13 eaten_date = models.DateField(editable=True, blank=True, null=True) 14 created = models.DateTimeField(auto_now_add=True) 15 16 def __str__(self): 17 return self.name

views.py

1from django.shortcuts import render 2from .models import Food 3from django.views.generic.list import ListView 4from django.views.generic.edit import CreateView, UpdateView, DeleteView 5# Create your views here. 6import datetime 7from django.db.models import Sum 8def foods(request): 9 today = datetime.datetime.today() 10 foods = Food.objects.filter(eaten_date=today) 11 kcal = foods.aggregate(Sum('kcal')) 12 #合計キロカロリー 13 kcal_list = [food['kcal'] for food in foods.values('kcal')] 14 ttl_kcal = sum(kcal_list) 15 # total_protein 16 protein_list = [food['protein'] for food in foods.values('protein')] 17 ttl_protein = sum(protein_list) 18 #合計キロカロリー 19 fat_list = [food['fat'] for food in foods.values('fat')] 20 ttl_fat = sum(fat_list) 21 #合計キロカロリー 22 carb_list = [food['carb'] for food in foods.values('carb')] 23 ttl_carb = sum(carb_list) 24 25 context = { 26 'foods': foods, 27 'ttl_kcal': ttl_kcal, 28 'ttl_protein': ttl_protein, 29 'ttl_fat': ttl_fat, 30 'ttl_carb': ttl_carb, 31 'kcal': kcal, 32 } 33 return render(request, 'base/foods.html', context) 34 35# class FoodList(ListView): 36# model = Food 37# template_name = 'base/foods.html' 38# # html内で使う変数名をobject_listから任意名に変更 39# context_object_name = 'foods' 40# def get_context_data(self, **kwargs): 41# context = super().get_context_data(**kwargs) 42# context['foods'] = [food['kcal'] for food in Food.objects.values('kcal')] 43# context['total_total'] = sum(context['foods']) 44# return context 45 # def get_context_data(self, **kwargs): 46 # context = super().get_context_data(**kwargs) 47 # context['food'] = 'pancake' 48 # return context 49 50from django.urls import reverse_lazy 51class FoodCreate(CreateView): 52 template_name = 'base/create.html' 53 model = Food 54 fields = '__all__' 55 success_url = reverse_lazy('foods') 56 57 58class FoodUpdate(UpdateView): 59 template_name = 'base/update.html' 60 model = Food 61 fields = '__all__' 62 success_url = reverse_lazy('foods') 63 64class FoodDelete(DeleteView): 65 template_name = 'base/delete.html' 66 model = Food 67 context_object_name = 'food' 68 success_url = reverse_lazy('foods') 69

foods.html

1<h1>今日食べたもの</h1> 2<p>本日は{% now "F" %}{% now "j" %}日({% now "l" %})です</p> 3<a href="{% url 'create' %}">追加</a> 4 5<table> 6 <tr> 7 <th>食べもの</th> 8 <th>カロリー</th> 9 <th>タンパク質</th> 10 <th>脂質</th> 11 <th>炭水化物</th> 12 <th>日付</th> 13 </tr> 14 15 {% for food in foods %} 16 <tr> 17 <td>{{ food.name }}</td> 18 <td>{{ food.kcal }}</td> 19 <td>{{ food.protein }}</td> 20 <td>{{ food.fat }}</td> 21 <td>{{ food.carb }}</td> 22 <td>{{ food.eaten_date }}</td> 23 <td><a href="{% url 'update' food.id %}">編集</a></td> 24 <td><a href="{% url 'delete' food.id %}">削除</a></td> 25 </tr> 26 {% empty %} 27 <h4>No itmes</h4> 28 {% endfor %} 29 <tr> 30 <th>合計</th> 31 <th>{{ ttl_kcal }}</th> 32 <th>{{ ttl_protein }}</th> 33 <th>{{ ttl_fat }}</th> 34 <th>{{ ttl_carb }}</th> 35 </tr> 36</table> 37

やりたい計算といたしましては、(protein + carb)4 + fat9 をカロリーとしてその食事のDBに保存、html上に表示させたいです。現在は新規追加からフォームにカロリーを手入力しています。なので、フォームではprotein, fat, carbなどのkcal以外を打ち込めれる感じにしたいです。この計算をviewsでするのか、html上で行うのか、やり方をご教授していただけるとありがたいです。

自分で調べたところ、アプリ直下にtemplatestagファイルを作り、その中にutils.pyを作り、そこにコードを書くと言われていました。ですが、四則演算の仕方がどうにもわからないので、手が止まっています。

ご協力していただける方、よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問