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

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

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

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

Q&A

解決済

1回答

2404閲覧

ログインユーザーをmodels.ForeignKey内でデフォルトで表示する方法

SH-221B

総合スコア2

Django

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

0グッド

0クリップ

投稿2021/01/19 02:04

編集2021/01/19 06:07

下記サイトにあるテンプレートアプリを使用してアプリを作成しています。
https://qiita.com/okoppe8/items/4cc0f87ea933749f5a49

実現したいこと

新規登録をするページでユーザーを選択する項があるのですが、下図のように --- と表示させず
イメージ説明
現在ログインしているユーザーをデフォルトでセットするにはどのようにすれば良いのでしょうか?
例:admin でログインしているとフォームに既に admin が入っている状態にしたい
イメージ説明

ソースコード

models

1# ユーザーを選択する項 2created_by = models.ForeignKey( 3 User, 4 #default =, 5 verbose_name='ユーザーを選択', 6 related_name='CreatedBy', 7 on_delete=models.CASCADE, 8)

views

1class ItemCreateView(LoginRequiredMixin, CreateView): 2 """ 3 登録画面 4 """ 5 model = Item 6 form_class = ItemForm 7 success_url = reverse_lazy('index') 8 9 def form_valid(self, form): 10 """ 11 登録処理 12 """ 13 item = form.save(commit=False) 14 item.created_by = self.request.user 15 item.created_at = timezone.now() 16 item.updated_by = self.request.user 17 item.updated_at = timezone.now() 18 item.save() 19 20 return HttpResponseRedirect(self.success_url)

試したこと

ユーザーIDを views.py で取得して default=UserId のようにすればいけるのではないかと考えているのですが、views.py の使い方を理解出来ておらず、ユーザーIDの取得の仕方、取得した後 models.py に値を渡す方法などが分からず詰まっております。

お手数をおかけしますが、ご教授をお願い致します

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

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

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

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

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

guest

回答1

0

ベストアンサー

タスクなどアプリ内の項目(アイテム)への新規登録の箇所で、以下の修正を施してはいかがでしょうか。

詳細・削除画面 共通部品 【★】 :/app/templates/app/item_detail_contents.html にて、マスターから表示する箇所を変更します。

html

1{{ item.xxxxx|default_if_none:"未入力" }} 2 3 ↓ 4 5{{ item.created_by.get_full_name }}

参照元のアプリ自体は、ログインしたユーザーには、それ以外のユーザーの情報は見えないように考慮された設計になっているようです。


【追記】

入力フォームは「django-crispy-forms」というライブラリが使われているため、入力項目の見出しをオフにしたり複数項目をインライン表示するような柔軟性に欠けます。
フォームに手を加えたい(自由度を高めたい)場合は "django-bootstrap4" を使います。
こちらで入力フィールド毎に細かい制御をしましょう。

django-bootstrap4

 

requirement.txt

1Django==2.1.2 2django-bootstrap4==2.0.1 # django-crispy-forms==1.7.2 より変更 3django-widget-tweaks==1.4.8 # 追加 4django-filter==2.0.0 5pytz==2018.5

requirement.txt からのインストールで上手く行かない場合は、こちらのコマンドでインストールしてください。
(2.0.1 より新しいバージョンですと、Django 2.2以上にしか対応していないです。ご注意を。)

Terminal

1$ pip install django-bootstrap4==2.0.1 2```  3  4config/setting.py 5```pyhon 6INSTALLED_APPS = [ 7(略) 8 'django.contrib.staticfiles', 9 'bootstrap4', # 'crispy_forms' から変更 10 'widget_tweaks', # 追加 11 'users.apps.UsersConfig', 12 'app.apps.AppConfig', 13]

 
/app/templates/app/item_form.html

html

1{% extends "./_base.html" %} 2{% bootstrap_css %} <!-- {% load crispy_forms_tags %} より変更 --> 3{% bootstrap_javascript jquery='full' %} <!-- 追加 --> 4{% load widget_tweaks %} <!-- 追加 --> 5{% block content %} 6 {{ form.certifications.errors }} 7 <div class="container"> 8 <div class="row"> 9 <div class="col-12"> 10 <h2 class="text-center">登録・更新</h2> 11 </div> 12(略) 13 <div class="row"> 14 <div class="col-12"> 15 <form method="post" id="myform"> 16 {{form.as_p}} <!-- {% crispy form %} より変更 --> 17 </form> 18 </div> 19 </div> 20(略) 21{% endblock %}

 

参照元;
[Python] プログラム初心者のためのWebアプリ簡単作成法 - 4.カスタマイズのヒント -- 画面デザインの変更

DjangoでBootstrap4を使う方法

Bootstrap4の導入・設定と、bootstrap4テンプレートを各画面で共有する/django3.0

投稿2021/01/19 03:41

編集2021/01/19 09:00
_whitecat_22

総合スコア1305

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

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

SH-221B

2021/01/19 04:52

回答ありがとうございます。 記載はしていませんでしたが、その部分は既に回答の通りに変更しているのですが、そのように変更すると ログインユーザーをデフォルトで表示することが出来るようになるのでしょうか?
_whitecat_22

2021/01/19 05:20

app/views.py の各class に 「LoginRequiredMixin」の指定があるため、ログインしたユーザーのみしか操作やデータ閲覧ができないはずです。 そのため、他のユーザーの情報を見せるようにしてはマズイです。 登録画面(登録処理)で使えるユーザーも、item.created_by = self.request.user と指定されているため、ログインユーザー本人のみとなっています。
SH-221B

2021/01/21 02:00

返信が遅くなって申し訳ございません。回答の追記ありがとうございます。 djangoを触るのは今回が初めてで何が何やら分からずにいたところを、具体的なコードを載せて頂いて非常に感謝しております。 一度この方法でフォームを編集してみます。重ねて御礼申し上げます。
_whitecat_22

2021/01/21 02:25

どういたしまして。 この方法で、もし詰まるようでしたら、またご質問ください。 私もdjangoは、まだまだ習得中ですので、大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問