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

質問編集履歴

4

文法の修正

2019/11/18 15:53

投稿

pi-natu
pi-natu

スコア5

title CHANGED
File without changes
body CHANGED
@@ -33,25 +33,23 @@
33
33
 
34
34
 
35
35
 
36
- #blog/forms.py
36
+ #blog/urls.py
37
37
  ```python
38
- from django import forms
38
+ from django.urls import path
39
+ from . import views
39
40
 
40
- from .models import Post
41
+ urlpatterns = [
42
+ path('', views.post_list, name='post_list'),
43
+ path('post/<int:pk>/post_form/', views.post_form, name='post_form'),
44
+ ]
41
45
 
42
- class PostForm(forms.ModelForm):
43
46
 
44
- class Meta:
45
- model = Post
46
- fields = '__all__'
47
-
48
-
49
47
  ```
50
48
 
51
49
  #blog/templates/blog/post_list.html
52
50
  ```HTML
53
51
  {% for post in posts %}
54
- <form action="" method="POST">
52
+ <form action="{% url 'post_form' pk=post.pk %}" method="POST">
55
53
  {% csrf_token %}
56
54
  <input type="submit" value="+1">
57
55
  </form>
@@ -77,14 +75,14 @@
77
75
  def post_form(request):
78
76
 
79
77
  if request.method == 'POST':
80
- form = PostForm(request.POST)
78
+ post = get_object_or_404(Post, pk=pk)
81
- if form.is_valid():
79
+ post.up_number += 1
82
- up_number = int(form.cleaned_data['up_number']) + 1
83
- form.save()
80
+ post.save()
84
- return redirect('/')
85
81
 
82
+ return render(request, 'blog/post_list')
86
83
 
87
84
 
85
+
88
86
  ```
89
87
 
90
88
 

3

文法の修正

2019/11/18 15:53

投稿

pi-natu
pi-natu

スコア5

title CHANGED
File without changes
body CHANGED
@@ -41,8 +41,11 @@
41
41
 
42
42
  class PostForm(forms.ModelForm):
43
43
 
44
+ class Meta:
45
+ model = Post
44
- up_number = forms.IntegerField()
46
+ fields = '__all__'
45
47
 
48
+
46
49
  ```
47
50
 
48
51
  #blog/templates/blog/post_list.html
@@ -74,12 +77,14 @@
74
77
  def post_form(request):
75
78
 
76
79
  if request.method == 'POST':
80
+ form = PostForm(request.POST)
81
+ if form.is_valid():
82
+ up_number = int(form.cleaned_data['up_number']) + 1
83
+ form.save()
84
+ return redirect('/')
77
85
 
78
- post.up_number = int(post.cleaned_data['up_number']) + 1
79
86
 
80
- post.save()
81
87
 
82
-
83
88
  ```
84
89
 
85
90
 

2

2019/11/15 07:27

投稿

pi-natu
pi-natu

スコア5

title CHANGED
File without changes
body CHANGED
File without changes

1

書式の改善

2019/11/14 09:03

投稿

pi-natu
pi-natu

スコア5

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,4 @@
1
1
  ### 前提・実現したいこと
2
- ※ここに写真を載せていない分はDjango Girlsのチュートリアルと同じです。(ディレクトリも同様)
3
2
  Djangoでデータベースの更新を行いたいです。
4
3
  具体的に言うと、ブラウザ上で”+1”のボタンを押すとデータベース上でその数字が+1されその数字をブラウザ上に表示したいです。
5
4
  例)元の数字が1→ボタンを押す→データベースが更新され1が2になる→2がブラウザ上に表示される。
@@ -10,23 +9,82 @@
10
9
  ボタンを押してもデータベース上では数字の更新後行われていない。
11
10
 
12
11
  ### 該当のソースコード
13
- #models.py
12
+ #blog/models.py
13
+ ```python
14
+ from django.conf import settings
15
+ from django.db import models
16
+ from django.utils import timezone
17
+
18
+
19
+ class Post(models.Model):
20
+ author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
14
- ![イメージ説明](79367032c94eccc09389122b9762a08f.png)
21
+ title = models.CharField(max_length=200)
22
+
23
+ #このup_numberをどうにかしたい
24
+ up_number = models.IntegerField(default=0)
25
+
26
+ published_date = models.DateTimeField(blank=True, null=True)
27
+
28
+ def publish(self):
29
+ self.published_date = timezone.now()
30
+ self.save()
31
+
32
+ ```
15
33
 
16
34
 
17
35
 
18
- #forms.py
36
+ #blog/forms.py
37
+ ```python
19
- ![イメージ説明](e79402222eaf65ffb9b9bfc2909f7438.png)
38
+ from django import forms
20
39
 
21
- #post_list.html
40
+ from .models import Post
22
- ![イメージ説明](d46ebc083598e54f161897c0827b02ea.png)
23
41
 
24
- #views.py
25
- ![イメージ説明](93dceecaea14d2a2316d50e0e133334e.png)
42
+ class PostForm(forms.ModelForm):
26
43
 
44
+ up_number = forms.IntegerField()
27
45
 
46
+ ```
28
47
 
48
+ #blog/templates/blog/post_list.html
49
+ ```HTML
50
+ {% for post in posts %}
51
+ <form action="" method="POST">
52
+ {% csrf_token %}
53
+ <input type="submit" value="+1">
54
+ </form>
55
+ <div>
56
+ <h5>{{ post.up_number }}</h5>
57
+ </div>
58
+ {% endfor %}
29
59
 
60
+ ```
61
+
62
+ #blog/views.py
63
+ ```python
64
+ from django.shortcuts import render
65
+ from django.utils import timezone
66
+ from .forms import PostForm
67
+ from .models import Post
68
+
69
+ def post_list(request):
70
+ posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
71
+ return render(request, 'blog/post_list.html', {'posts': posts})
72
+
73
+ #分からないポイント
74
+ def post_form(request):
75
+
76
+ if request.method == 'POST':
77
+
78
+ post.up_number = int(post.cleaned_data['up_number']) + 1
79
+
80
+ post.save()
81
+
82
+
83
+ ```
84
+
85
+
86
+
87
+
30
88
  ### 補足情報(FW/ツールのバージョンなど)
31
89
  OS Windows10
32
90
  python 3.7.3