teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

viewに追加のコードを記載

2021/03/09 04:32

投稿

jqk
jqk

スコア26

title CHANGED
File without changes
body CHANGED
@@ -80,6 +80,20 @@
80
80
 
81
81
  [views.py]
82
82
  ```
83
+ from django.shortcuts import redirect
84
+ from django.views.generic import ListView, DetailView
85
+ from .forms import CreateRoomForm
86
+ from accounts.models import User
87
+ from .models import Room, Message
88
+
89
+ class TeacherListView(ListView):
90
+ model = User
91
+ template_name = 'index.html'
92
+
93
+ def get_queryset(self):
94
+ queryset = User.objects.filter(is_teacher=True)
95
+ return queryset
96
+
83
97
  class RoomMessagesListView(DetailView):
84
98
  model = Message
85
99
  template_name = 'room.html'

2

エラー内容変更

2021/03/09 04:32

投稿

jqk
jqk

スコア26

title CHANGED
@@ -1,1 +1,1 @@
1
- index.htmlからas_hiddenを使用し、viewsにpkを渡したいのだがKeyError: 'pk'なる
1
+ index.htmlからas_hiddenを使用し、viewsにpkを渡したいのだがprint(form.cleaned_data.get('pk'))がNoneになる
body CHANGED
@@ -74,10 +74,8 @@
74
74
  {% else %}
75
75
  ```
76
76
 
77
- そしてここで、テンプレートから渡されたteacherの**pk**とログイン中のcustomerの**pk**を使用しfilterにかけたいのですが、**KeyError: 'pk'**エラーが出ます。
77
+ そしてここで、テンプレートから渡されたteacherの**pk**とログイン中のcustomerの**pk**を使用しfilterにかけたいのですが、`print(form.cleaned_data.get('pk')`を試すと出力結果がNoneになります。
78
- `Room.objects.filter(teacher_id=form.cleaned_data['pk'], customer_id=request.user.pk)`
79
- このコードの記述方法が間違ってると思われるのですが、どう変更すればいいのでしょうか?
80
- そもそも`{{ form.object.teacher.pk.as_hidden }}`こちらの使用方法も合ってますでしょうか?
78
+ `{{ form.object.teacher.pk.as_hidden }}`おそらくこちらの記述方法が間違ってると思ってます
81
79
  ご教授頂ければ幸いです。よろしくお願い致します。
82
80
 
83
81
  [views.py]

1

モデル情報追加

2021/03/08 11:13

投稿

jqk
jqk

スコア26

title CHANGED
File without changes
body CHANGED
@@ -2,8 +2,40 @@
2
2
  TeacherモデルとCustomerモデルがありまして、
3
3
  それぞれのモデルとRoomモデルを紐づけてあります。
4
4
 
5
+ [accounts/models.py]
6
+ ```
7
+ from django.contrib.auth.models import AbstractUser
8
+ from django.db import models
9
+
10
+ class User(AbstractUser):
11
+ is_customer = models.BooleanField(default=False)
12
+ is_teacher = models.BooleanField(default=False)
13
+
14
+ class Customer(models.Model):
15
+ user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
16
+ age = models.CharField(verbose_name='年齢', blank=True, null=True, max_length=10)
17
+ personality = models.TextField(verbose_name='アピールポイント', blank=True, null=True, max_length=1000)
18
+ profile_picture = models.ImageField(verbose_name = 'プロフィール画像', blank=True, null=True, upload_to='images/', default='default_user_icon.png')
19
+
20
+ def __str__(self):
21
+ return self.user.username
22
+
23
+ class Teacher(models.Model):
24
+ user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
25
+ age = models.CharField(verbose_name='年齢', blank=True, null=True, max_length=10)
26
+ personality = models.TextField(verbose_name='アピールポイント', blank=True, null=True, max_length=1000)
27
+ profile_picture = models.ImageField(verbose_name = 'プロフィール画像', blank=True, null=True, upload_to='images/', default='default_user_icon.png')
28
+
29
+ def __str__(self):
30
+ return self.user.username
31
+
32
+ ```
5
33
  [models.py]
6
34
  ```
35
+ from django.db import models
36
+ from django.conf import settings
37
+ from accounts.models import User, Customer, Teacher
38
+
7
39
  class Room(models.Model):
8
40
  teacher_id = models.ForeignKey(Teacher, null=True, blank=True, on_delete=models.CASCADE)
9
41
  customer_id = models.ForeignKey(Customer, null=True, blank=True, on_delete=models.CASCADE)
@@ -58,12 +90,12 @@
58
90
  if request.method == 'POST':
59
91
  form = CreateRoomForm(request.POST)
60
92
  if form.is_valid():
61
- room_data = Room.objects.filter(teacher_id=form.cleaned_data['pk'], customer_id=request.user.pk)
93
+ room_data = Room.objects.filter(teacher_id=form.cleaned_data.get('pk'), customer_id=request.user.pk)
62
- if room_data:
94
+ if room_data is not None:
63
- return redirect('room', pk=room_data.pk)
95
+ return redirect('room', pk=room_data[0].pk)
64
96
  else:
65
97
  room_data = Room()
66
- room_data.teacher_id = form.cleaned_data['pk']
98
+ room_data.teacher_id = form.cleaned_data.get('pk')
67
99
  room_data.customer_id = request.user.pk
68
100
  room_data.save()
69
101
  return redirect('room', pk=room_data.pk)