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

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

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

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

Q&A

解決済

1回答

374閲覧

DjangoでModelFormを使用し、表示されている値を加工しDBを更新したい。

kenone

総合スコア32

Django

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

0グッド

0クリップ

投稿2020/08/23 05:44

前提・実現したいこと

DjangoでModelFormを使用し、表示されている値を加工しDBを更新したいです。

例えば
DBが0.03の場合100倍して3.00%と表示し、更新する場合は画面の5.00を1/100した0.05をDBに更新したいです。

サンプルソースでは、100倍した値を表示にするところまでです。
更新する際の加工方法がわからず困っています。

該当のソースコード

forms.py

from django import forms from .models import samplde_model class testform(forms.ModelForm): class Meta: model = samplde_model fields=('title','rate')

models.py

from django.db import models class samplde_model(models.Model): title = models.CharField(max_length=10) rate = models.FloatField()

urls.py

from django.urls import path ,include from .views import testfunc from . import views urlpatterns = [ path('',testfunc,name='testfunc'), ]

views.py

from django.shortcuts import render from django.http import HttpResponse from .forms import testform from .models import samplde_model def testfunc(request): if samplde_model.objects.filter(id=1).exists(): obj = samplde_model.objects.get(id=1) else: obj = samplde_model() if (request.method == 'POST'): uf = testform(request.POST,instance=obj) uf.save() obj.rate ='{:.2f}'.format(obj.rate *100) context = { 'form':testform(instance=obj), } return render(request , 'index.html',context)

templates/index.html

<!doctype html> <html lang="ja"> <head> <title>タイトル</title> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous"> </head> <body> <br> <table> <form action="" method="post" enctype="multipart/form-data"> {% for field in form %} <tr> <th>{{ field.label_tag }}</th> <td>{{ field }}{% if field.label|lower == 'rate' %}%{% endif %}</td> </tr> {% endfor %} {% csrf_token %} <tr><td></td><td><input type="submit" value ="送信"></td></tr> </form> </table> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記で、できないでしょうか。

python

1uf = testform(request.POST,instance=obj) 2instance = uf.save(commit=False) 3instance.rate /= 100 4instance.save()

投稿2020/08/24 00:13

hasami

総合スコア1277

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

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

kenone

2020/08/24 01:46

実現できました。 勉強になります。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問