前提
Python 3.7.1
Django version 2.1.5
実現したいこと
下記画像で、プルダウンで表示されているのは、外部キーで参照したテーブルのオブジェクトになっているが、
下記の「山田太郎」のようにプルダウンで表示されるものをオブジェクトではなく、登録した顧客名にしたい。
つまり、customer.nameのようにしてカラムの値を抽出して、プルダウンに表示させたい。
顧客名に関しては、別のページで登録・一覧表示を見ることができる状態です。
発生している問題・エラーメッセージ
外部キーは参照できているが、参照先のテーブル(今回の場合は、Customerテーブル)からnameカラムの値を抽出できていない
ソースコード
views
1def lesson_form(request): 2 if request.method == "POST": 3 form = LessonForm(request.POST) 4 if form.is_valid(): 5 lesson = form.save(commit=False) 6 lesson.price = lesson.lesson_time * PRICE_PER_HOUR 7 lesson.save() 8 return HttpResponseRedirect(reverse('lesson_index')) 9 else: 10 form = LessonForm() 11 return TemplateResponse(request, 'exam/lesson_form.html', {'form': form})
models
1from django.db import models 2from django.utils import timezone 3from datetime import datetime 4from django.core.validators import MaxValueValidator, MinValueValidator 5 6class Customer(models.Model): 7 Men = '男' 8 Women = '女' 9 GENDER = ( 10 (Men, '男'), 11 (Women, '女'), 12 ) 13 14 name = models.CharField('名前', max_length = 20) 15 gender = models.CharField( 16 '性別', 17 max_length = 1, 18 choices=GENDER, 19 ) 20 age = models.IntegerField('年齢') 21 22class Lesson(models.Model): 23 English = '英語' 24 Finance = 'ファイナンス' 25 Programing = 'プログラミング' 26 GENRE = ( 27 (English, '英語'), 28 (Finance, 'ファイナンス'), 29 (Programing, 'プログラミング'), 30 ) 31 32 customer = models.ForeignKey(Customer, verbose_name='顧客名', on_delete=models.PROTECT) 33 34 genre = models.CharField( 35 'ジャンル', 36 max_length = 255, 37 choices=GENRE, 38 default=English) 39 lesson_day = models.DateTimeField('受講日') 40 lesson_time = models.PositiveIntegerField( 41 '受講時間(h)', 42 default = 1, 43 validators=[ 44 MaxValueValidator(12), 45 MinValueValidator(1) 46 ] 47 ) 48 price = models.IntegerField('支払金額', null=True) 49 50 def __str__(self): 51 return self.customer
forms
1from django import forms 2from exam.models import Customer 3from exam.models import Lesson 4 5class LessonForm(forms.ModelForm): 6 class Meta: 7 model = Lesson 8 fields = ('customer', 'genre', 'lesson_day', 'lesson_time')
試したこと
modelsの下記の部分がおかしいのはないかと思い、第一引数のCustomerを色々触ってみましたが、
エラーで返ってきました。
models
1customer = models.ForeignKey(Customer, verbose_name='顧客名', on_delete=models.PROTECT)
回答1件
あなたの回答
tips
プレビュー