前提・実現したいこと・知りたいこと
CreateView内で定義した変数をcreate.htmlで表示したいです。
プログラミング初心者です。
Djangoで麻雀のスコア表を作成するアプリを作ろうと思っています。
今実現しようと思っていることは、プレイヤーの入力フォームと点数入力のフォームを別で作成し、点数入力の画面で前に入力したプレイヤーの名前を表示させることです。
つまり、モデルが2つあり、そのうちの片方のモデルを作成する用のhtmlファイルにもう片方のモデルの内容を表示したいです。
発生している問題・エラーメッセージ
CreateView内の変数をcreate.htmlで表示する方法が分かりませんでした。
下のソースコードを実行してみると
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'tuple'
というエラーメッセージが出てしまいました。
該当のソースコード
#####models.py
classが2つあります。今は先にMahjongPlayerModelを入力し、後にMahjongRecordModelを入力します。
python
1class MahjongPlayerModel(models.Model): 2 player1 = models.CharField(max_length = 10) 3 player2 = models.CharField(max_length = 10) 4 player3 = models.CharField(max_length = 10) 5 player4 = models.CharField(max_length = 10) 6 7RANK = (('1st','1st'), ('2nd','2nd'), ('3rd','3rd'), ('4th','4th')) 8 9class MahjongRecordModel(models.Model): 10 rank1 = models.CharField( 11 max_length = 50, 12 choices = RANK, 13 default = '1st' 14 ) 15 rank2 = models.CharField( 16 max_length = 50, 17 choices = RANK, 18 default = '2nd' 19 ) 20 rank3 = models.CharField( 21 max_length = 50, 22 choices = RANK, 23 default = '3rd' 24 ) 25 rank4 = models.CharField( 26 max_length = 50, 27 choices = RANK, 28 default = '4th' 29 ) 30 score1 = models.IntegerField(default=25000) 31 score2 = models.IntegerField(default=25000) 32 score3 = models.IntegerField(default=25000) 33 score4 = models.IntegerField(default=25000)
#####urls.py
path('playercreate/', MahjongPlayerCreate.as_view(), name = 'playercreate'), path('create/', MahjongRecordCreate.as_view(), name = 'create'),
#####views.py
2つ目のclassの1.2行目が問題箇所です。
python
1class MahjongPlayerCreate(CreateView): 2 template_name = 'playercreate.html' 3 model = MahjongPlayerModel 4 fields = ('player1', 'player2', 'player3', 'player4') 5 success_url = reverse_lazy('top') 6 7class MahjongRecordCreate(CreateView): 8 players = MahjongPlayerModel.objects.all() 9 template_name = ('create.html', {'players':players}) #このようにしたい。。。 10 model = MahjongRecordModel 11 fields = ( 12 'score1', 'score2', 'score3', 'score4', 13 'rank1', 'rank2', 'rank3', 'rank4') 14 success_url = reverse_lazy('scorecalculate')
#####create.html
このように表示したいです。
html
1{% extends 'base.html' %} 2 3{% block content %} 4<div class = 'container'> 5 <p><a href="{% url 'top' %}" class="btn-lg btn-light" tabindex="-1" role="button" aria-disabled="true">戻る</a></p> 6 <form action = "" method = "POST">{% csrf_token %} 7 <p> 8 {% for item in players %} 9 {{ item.player1 }} 10 {{ form.score1 }} 11 {{ form.rank1 }} 12 </p> 13 <p> 14 {{ item.player2 }} 15 {{ form.score2 }} 16 {{ form.rank2 }} 17 </p> 18 <p> 19 {{ item.player3 }} 20 {{ form.score3 }} 21 {{ form.rank3 }} 22 </p> 23 <p> 24 {{ item.player4 }} 25 {{ form.score4 }} 26 {{ form.rank4 }} 27 </p> 28 {% endfor %} 29 <input type = "submit" value = "保存する"> 30 </form> 31</div> 32{% endblock content %}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/27 11:17
2020/07/27 19:24