我有一个视图来更新我的格式集的6,只有点击发送按钮给我错误,每个表单的id丢失.你是怎么修好的?
当我必须创建格式集时,id永远不会有问题.有人能告诉我哪里错了吗?我把代码留在下面
视图
@login_required
def PianoSingleUpdateView(request, id):
piano = models.Piano.objects.get(single_piano__id = id)
piano_sett = models.PianoSingleDay.objects.get(id = id)
dato = models.PianoDay.objects.filter( piano_day = piano_sett)
DatiFormSet = modelformset_factory(models.PianoDay, extra = 0, fields=('id', 'kcal', 'carboidrati', 'proteine', 'grassi'))
if request.method == 'POST':
dati_formset = DatiFormSet(request.POST, request.FILES, queryset = dato)
if dati_formset.is_valid():
for dato in dati_formset:
dato.save()
return redirect('gestione-piano', id = piano.id)
else:
dati_formset = DatiFormSet(queryset = dato)
context = {'piano': piano, 'piano_sett': piano_sett, 'dati_formset': dati_formset}
return render(request, 'crud/update/update_piano_giornaliero.html', context)模型
class Piano(models.Model):
nome_piano = models.CharField(max_length=100)
data_inizio = models.DateField()
data_fine = models.DateField()
utente_piano = models.ForeignKey(
User,
on_delete = models.CASCADE,
related_name = 'utente_piano'
)
def __str__(self):
return self.nome_piano
class PianoSingleDay(models.Model):
giorni_settimana_scelta = [
("1","Lunedì"),
("2","Martedì"),
("3","Mercoledì"),
("4","Giovedì"),
("5","Venerdì"),
("6","Sabato"),
("7","Domenica")
]
giorni_settimana = models.CharField(
choices = giorni_settimana_scelta,
max_length = 300
)
single_piano = models.ForeignKey(
Piano,
on_delete = models.CASCADE,
related_name = 'single_piano'
)
def __str__(self):
return self.giorni_settimana
class PianoDay(models.Model):
scelta_pasto = [
("1","Colazione"),
("2","Spuntino mattina"),
("3","Pranzo"),
("4","Merenda"),
("5","Cena"),
("6","Spuntino sera")
]
pasto = models.CharField(
choices = scelta_pasto,
max_length = 300,
default = '-'
)
kcal = models.IntegerField(default = 0)
grassi = models.IntegerField(default = 0)
carboidrati = models.IntegerField(default = 0)
proteine = models.IntegerField(default = 0)
piano_day = models.ForeignKey(
PianoSingleDay,
on_delete = models.CASCADE,
related_name = 'piano_day'
)文件html
<form method="post" novalidate autocomplete="off" class="form-not-box">
{% csrf_token %}
<div class="box-schede">
<div class="alert alert-pop-up mt-3" role="alert">
Le colonne lasciate a 0 non verranno considerate.
</div>
{{ dati_formset.management_form }}
<div class="row mt-3">
{% for dati in dati_formset %}
<div class="col-lg-2">
<div class="info-piano">
<div class="ico">
{% if forloop.counter == 1 %}
<object type="image/svg+xml" data="{% static 'img/icone/colazione.svg' %}">
Icona colazione
</object>
{% elif forloop.counter == 3 %}
<object type="image/svg+xml" data="{% static 'img/icone/pranzo.svg' %}">
Icona pranzo
</object>
{% elif forloop.counter == 5 %}
<object type="image/svg+xml" data="{% static 'img/icone/cena.svg' %}">
Icona cena
</object>
{% elif forloop.counter == 2 or forloop.counter == 4 or forloop.counter == 6 %}
<object type="image/svg+xml" data="{% static 'img/icone/merenda.svg' %}">
Icona cena
</object>
{% endif %}
</div>
<div class="form-floating mb-3 mt-3">
{{ dati.kcal|add_class:'form-control'|append_attr:"placeholder: dati" }}
{{ dati.kcal.label_tag }}
</div>
<div class="form-floating mb-3">
{{ dati.carboidrati|add_class:'form-control'|append_attr:"placeholder: dati" }}
{{ dati.carboidrati.label_tag }}
</div>
<div class="form-floating mb-3">
{{ dati.proteine|add_class:'form-control'|append_attr:"placeholder: dati" }}
{{ dati.proteine.label_tag }}
</div>
<div class="form-floating">
{{ dati.grassi|add_class:'form-control'|append_attr:"placeholder: dati" }}
{{ dati.grassi.label_tag }}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="buttons mb-3">
<a href="{% url 'gestione-piano' piano.id %}" class="btn btn-warning-rev">Indietro</a>
<input type="submit" class="btn btn-warning" value="Aggiorna piano">
</div>
</form>发布于 2022-01-10 16:02:08
我的观察告诉我,您的问题是不应该包含id值的DatiFormSet字段,以及在queryset = dato中不需要的函数视图,但是在某些情况下,您应该添加一个Piano实例。
@login_required
def PianoSingleUpdateView(request, id):
piano = models.Piano.objects.get(single_piano__id = id)
piano_sett = models.PianoSingleDay.objects.get(id = id)
dato = models.PianoDay.objects.filter( piano_day = piano_sett)
DatiFormSet = modelformset_factory(models.PianoDay, extra = 0, fields=('kcal', 'carboidrati', 'proteine', 'grassi'))
if request.method == 'POST':
dati_formset = DatiFormSet(request.POST, request.FILES , instance=piano)
if dati_formset.is_valid():
for dato in dati_formset:
dato.save()
return redirect('gestione-piano', id = piano.id)
else:
dati_formset = DatiFormSet(request.POST)
context = {'piano': piano, 'piano_sett': piano_sett, 'dati_formset': dati_formset}
return render(request, 'crud/update/update_piano_giornaliero.html', context)https://stackoverflow.com/questions/70654693
复制相似问题