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

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

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

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

Q&A

解決済

1回答

753閲覧

DjangoでModelFormを使用し、テキストボックスに単位を表示させたい

kenone

総合スコア32

Django

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

0グッド

0クリップ

投稿2020/08/22 07:52

前提・実現したいこと

DjangoでModelFormを使用し、テキストの単位として%表示を行いたいです。
単位の表示位置はテキストボックスの後ろであれば問題ありません。

該当のソースコード

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() 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"> {{ form.as_table }} {% 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

ベストアンサー

templates/index.htmlのform.as_tableを以下のように分解して%書いてみました。

diff

1- {{ form.as_table }} 2+ {% for field in form %} 3+ <tr> 4+ <th>{{ field.label_tag }}</th> 5+ <td>{{ field }}{% if field.label|lower == 'rate' %}%{% endif %}</td> 6+ </tr> 7+ {% endfor %}

td要素のclass属性か何かで識別してcssで%を付けてあげてもいいかもしれません。
或いはいっそmodel側で新しいfieldのtypeを作る方法もあるかもしれません。

投稿2020/08/23 01:27

編集2020/08/23 01:34
dameo

総合スコア943

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

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

kenone

2020/08/23 02:09

いろいろと実装方法があるということがわかりました。 サンプルも頂いたので簡単に実装できそうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問