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

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

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

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

解決済

更新する画面で、新規登録時に選択したプルダウンの項目を表示したい

mr.aruru
mr.aruru

総合スコア11

Django

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

1回答

0リアクション

0クリップ

124閲覧

投稿2022/07/22 02:52

困っていること

djangoで、ロットを管理するシステムを作成しています。
masterとlotの2つのモデルがあり、masterには商品情報が入っています。
ロットを入力する画面で、商品を選択する際にプルダウンを実装しています。
新規登録時はプルダウンで商品を選択し、DBに選択したitemidが書きこまれるのですが、更新画面時には、itemidの値は取得できるものの、プルダウンに選択した商品が表示されず、困っております。
色々なサイトを見て調べた結果、formで、initialに指定すれば表示できることが分かったのですが、更新画面で表示させるには、どのようにデータを渡せばよいのか、その記述方法が分かりません。
よろしくお願いします。

該当のソースコード

views.py

from django.shortcuts import render, redirect,get_object_or_404 from django.urls import reverse_lazy from .models import master,lot from .forms import LotInputForm def CreateLotView(request): params = {'message': '', 'form': None} if request.method == 'POST': form = LotInputForm(request.POST) if form.is_valid(): form.save() return redirect('list_lot') else: params['form'] = form else: params['form'] = LotInputForm() return render(request, 'lot/lot_create.html', params) def UpdateLotView(request,lotid): obj = get_object_or_404(lot,pk=lotid) if request.method == 'POST': form = LotInputForm(request.POST) params = {"form": form} params["object"] = obj if form.is_valid(): form.save() return redirect('list_lot') else: params['form'] = form else: form = LotInputForm(request.POST) params = {"form": form} params["object"] = obj return render(request, 'lot/lot_update.html', params)

forms.py

from django import forms from .models import master,lot,Management_data,User_data class MasterChoiceField(forms.ModelChoiceField): def label_from_instance(self, obj): return str(obj.itemid) + ':' + obj.kbn + '(' + obj.type_name + ') class LotInputForm(forms.ModelForm): itemid = MasterChoiceField(queryset=master.objects.all()) def __init__(self, *args, **kwargs): super(LotInputForm, self).__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs["class"] = "form-control" self.fields['itemid'].widget.attrs["class"] = "form-select" class Meta: model = lot fields = ('lotid','itemid','purchase_date','delivery_date','price','purchase_number','shopname')

template.html

{% extends 'base.html' %} {% block title %}購入ロット登録{% endblock title %} {% block content %} <form method='POST'> {% csrf_token %} <div class="container"> <div class="row justify-content-center"> <div class="col-5"> <div class="row mb-4 form-group"> <div class="col-7"><h2>購入ロット登録</h2></div> </div> <div class="row mb-2 form-group"> <label class="col-form-label col-2" for="lotid">LOTID</label> <div class="col-3"><input type="text" class="form-control" id="lotid" name="lotid" disabled value={{object.lotid}}></div> </div> <div class="row mb-2 form-group"> <label class="col-form-label col-2" for="itemid">ItemID</label> <div class="col-8">{{ form.itemid }}</div> </div> --- << 省略 >> --- </div> </div> </div> </form> {% endblock content %}

試したこと

forms.pyの下記にinitialを設定。
itemid = MasterChoiceField(queryset=master.objects.all(),initial=itemid)

参考にしたサイト

https://noumenon-th.net/programming/2019/11/07/django-modelform/

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Django

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