Djangoで同じformを複数回使いたい。
解決したいこと
DjangoでWebアプリを作成しているのですが、
同じformを複数回使う方法がわかりません。
現状の書き方ですと、全て同じもの判定になっているので、views.pyで値をいれると
全てに入ってしまいます。
どうしたらいいのでしょうか?
やりたいことの流れとしては、データベースに 0か1か2の数値が入っていて、
レコードすべてを読み取り、1つづつプルダウンに表示していくという形になります。
mendantime_b を何回も使い、1つ1つ違う値をviews.pyで入れていくには
どうしたらいいでしょうか?
よろしくお願いいたします。
models.py
class BelongMaster(models.Model):
number_b = models.CharField(max_length=4, primary_key=True)
name_b = models.CharField(max_length=32)
mendanplace_b = models.IntegerField(
choices = MENDAN_STATE,
default = 0)
mendantime_b = models.IntegerField(
choices = MENDAN_TIME,
default = 0)
def __str__(self):
return (self.number_b) + ':' + (self.name_b) + ':' + str(self.mendanplace_b) + ':' + str(self.mendantime_b)
forms.py
class SyozokuForm(forms.ModelForm):
class Meta:
model = BelongMaster
fields = ['number_b','name_b','mendanplace_b','mendantime_b']
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
views.py
class SyozokuView(CreateView):
template_name = "account/Syozoku.html"
form_class = SyozokuForm
def get_context_data(self, **kwargs):
content = super().get_context_data(**kwargs)
content['form'] = SyozokuForm(initial= {'mendanplace_b':BelongMaster.objects.get(number_b="5000").mendanplace_b,
'mendantime_b' :BelongMaster.objects.get(number_b="5000").mendantime_b ,} )
content.update({
'BelongMaster':BelongMaster.objects.all().order_by("number_b"),
})
return content
html
<div class="table">
<table class="hyou2">
<tr>
<th>所属</th>
<th>面談場所</th>
<th>面談時間</th>
</tr>
{% for syozoku in BelongMaster %}
<tr class="{{ syozoku.number_b }}">
<td >{{ syozoku.name_b }}{{ syozoku.mendanplace_b }}</td>
<td>{% if syozoku.mendanplace_b == 0 %}
{{ form.mendanplace_b }}
{% elif syozoku.mendanplace_b == 1 %}
{{ form.mendanplace_b }}
{% else %}
{{ form.mendanplace_b }}
{% endif %}
</td>
<td>{% if syozoku.mendantime_b == 0 %}
{{ form.mendantime_b }}
{% elif syozoku.mendantime_b == 1 %}
{{ form.mendantime_b }}
{% else %}
{{ form.mendantime_b }}
{% endif %}
</td>
</tr>
{% endfor %}
</table>
</div>
<div class="button2">
<a href="{% url 'account:sakusei' %}" class="btn-square-1">更新</a> <br>
</div>
こんな風にしたいのだが......
こうなってしまう......
追記
models.py
class BelongMaster(models.Model):
number_b = models.CharField(max_length=4, primary_key=True)
name_b = models.CharField(max_length=32)
mendanplace_b = models.IntegerField(
choices = MENDAN_STATE,
default = 0)
mendantime_b = models.IntegerField(
choices = MENDAN_TIME,
default = 0)
def get_absolute_url(self):
return reverse('account:Syozoku', kwargs={'pk': self.pk})
def __str__(self):
return (self.number_b) + ':' + (self.name_b) + ':' + str(self.mendanplace_b) + ':' + str(self.mendantime_b)
forms.py
class SyozokuForm(forms.ModelForm):
class Meta:
model = BelongMaster
fields = ['number_b','name_b','mendanplace_b','mendantime_b']
SyozokuFormset = forms.modelformset_factory(model=BelongMaster,fields=('number_b','name_b','mendanplace_b','mendantime_b'),extra=0)
views.py
class SyozokuView(UpdateView):
model = BelongMaster
queryset = BelongMaster.objects.all()
template_name = "account/Syozoku.html"
form_class = SyozokuForm
def get_context_data(self, **kwargs):
ctx = super(SyozokuView, self).get_context_data(**kwargs)
ctx.update(dict(formset=SyozokuFormset(self.request.POST or None, instance=self.object)))
return ctx
def form_valid(self, form):
ctx = self.get_context_data()
formset = ctx['formset']
if formset.is_valid():
self.object = form.save(commit=False)
self.object.save()
formset.save()
return redirect(self.get_success_url())
else:
ctx['form'] = form
return self.render_to_response(ctx)
urls.py
path("<int:pk>/Syozoku/",views.SyozokuView.as_view(), name="Syozoku"),
エラー
Not Found: /Syozoku/
[13/Oct/2022 13:54:36] "GET /Syozoku/ HTTP/1.1" 404 3993
UpdateViewでmodelform_factoryを使用しようとしたところ
ページが見つからないとでました。
コードは間違っていないはずなのですがどういうことでしょうか.....
ここを参考にしました。
1