我的模板表单不保存对象。 这是我的观点:
class FeatureDeliveryEditView(
LoginRequiredMixin, PermissionRequiredMixin, SingleObjectMixin, FormView
):
permission_required = "auth.can_access_supervising_sections"
model = FeatureFilm
template_name = "project/project_update/feature/update_featurefilm_delivery.html"
def get(self, request, *args, **kwargs):
self.object = self.get_object()
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
return super().post(request, *args, **kwargs)
def get_form(self, form_class=None):
return FeatureDeliveryFormSet(**self.get_form_kwargs(), instance=self.object)
def form_valid(self, form):
form.save()
messages.success(self.request, "Delivery erfolgreich gespeichert")
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
messages.error(
self.request, f"Delivery nicht gespeichert: {form.errors}"
)
return super().form_invalid(form)
def get_success_url(self):
return (
reverse("feature-detail-deliveries-half", kwargs={"pk": self.object.pk})
+ "#content-start-under-cards"
)
def handle_no_permission(self):
return redirect("access-denied")
这是我的表单和表单集:
class FeatureDeliveryForm(ModelForm):
class Meta:
model = Delivery
exclude = (
"feature_id",
"tv_movie_id",
"tv_serie_block_id",
"restoration_id",
"source_material",
"scan_info",
"usage_version",
"orderer_id",
"receiver_1_id",
"receiver_2_id",
"receiver_3_id",
)
widgets = {
'trade_mark_brand': forms.Textarea(attrs={'rows': 1}),
'audio_channel_assignment': forms.Textarea(attrs={'rows': 1}),
'notes': forms.Textarea(attrs={'rows': 1}),
# ... Andere Widgets hier
}
FeatureDeliveryFormSet = inlineformset_factory(
FeatureFilm,
Delivery,
form=FeatureDeliveryForm,
can_delete=True,
)
如果我使用此模板,表单将被保存并且一切正常:
{% extends "_base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<div class="row py-5">
<h3 class="text-center">{{ object }} - Delivery hinzufügen/editieren</h3>
</div>
<div class="row">
<form method="post" enctype="multipart/form-data">
{% for hidden_field in form.hidden_fields %}
{{ hidden_field.errors }}
{{ hidden_field }}
{% endfor %}
{% csrf_token %}
{{ form.management_form }}
{{ form.non_form_errors }}
{% for delivery_form in form.forms %}
<hr>
{% if delivery_form.instance.id %}
{% if form.forms|length > 1 %}
<h5 class="text-warning">Delivery hinzufügen<br><br></h5>
{% else %}
Delivery hinzufügen<br><br>
{% endif %}
{% endif %}
<table>
{{ delivery_form.as_table}}
</table>
{% endfor %}
<hr>
<p>
<button type="submit" value="Update Collection" class="btn btn-primary btn-sm">Speichern</button>
<a href="{% url 'feature-detail-genre-content' pk=object.pk %}#content-start-under-cards" class="btn btn-secondary btn-sm">Zurück</a>
</p>
</form>
</div>
</div>
{% endblock %}
但不幸的是,这个功能模板并没有按照我想象的方式代表形式。每个对象及其字段都显示在另一个之下。但是,我希望并排显示对象的字段,并且每个附加对象接收一个新行。因此,我构建了以下模板。视觉表现与我想象的完全一样,但不幸的是,表单功能,更准确地说,保存功能不再起作用。表单本身为每个对象提供了一个错误,指出缺少“id”。不幸的是,我找不到解决方案。
{% extends "_base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<div class="row py-5">
<h3 class="text-center">{{ object }} - Delivery hinzufügen/editieren</h3>
</div>
<div class="row">
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{# {{ form.management_form }}#}
{# {{ form.non_form_errors }}#}
<table class="table table-dark table-bordered">
<thead>
<tr>
<th>Action</th>
<th>Del. Nummer</th>
<th>Besteller</th>
<th>Empfänger 1</th>
<th>Content</th>
<th>Produkt</th>
</tr>
</thead>
<tbody>
{% for delivery_form in form.forms %}
<tr>
<td>
{% if delivery_form.instance.id %}
{% if form.forms|length > 1 %}
<p class="text-warning">ändern</p>
{% endif %}
{% else %}
<p class="text-success">hinzufügen</p>
{% endif %}
</td>
<td>{{ delivery_form.delivery_number }}</td>
<td>{{ delivery_form.orderer_id }}</td>
<td>{{ delivery_form.receiver_1_id }}</td>
<td>{{ delivery_form.content }}</td>
<td>{{ delivery_form.product }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<hr>
<p>
<button type="submit" value="Update Collection" class="btn btn-primary btn-sm">Speichern</button>
<a href="{% url 'feature-detail-genre-content' pk=object.pk %}#content-start-under-cards" class="btn btn-secondary btn-sm">Zurück</a>
</p>
</form>
</div>
</div>
{% endblock %}
卡恩·杰曼德·赫尔芬?
“我现在知道缺少了什么,想与您分享。我忘记了对象的 ID 也需要包含在表单中。因此,我在模板中添加了其他目标,现在表单正在保存功能正在运行。”
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.management_form }}
{{ form.non_form_errors }}
<table class="table table-dark table-bordered">
<thead>
<tr>
<th>Action</th>
<th>Del. Nummer</th>
<th>Besteller</th>
<th>Empfänger 1</th>
<th>Content</th>
<th>Produkt</th>
<th>DELETE</th>
</tr>
</thead>
<tbody>
{% for delivery_form in form.forms %}
<tr>
<td>
{% if delivery_form.instance.id %}
{% if form.forms|length > 1 %}
<p class="text-warning">ändern</p>
{% endif %}
{% else %}
<p class="text-success">hinzufügen</p>
{% endif %}
</td>
<td>{{ delivery_form.delivery_number }}</td>
<td>{{ delivery_form.orderer_id }}</td>
<td>{{ delivery_form.receiver_1_id }}</td>
<td>{{ delivery_form.content }}</td>
<td>{{ delivery_form.product }}</td>
<td>
{{ delivery_form.DELETE }}
{{ delivery_form.id }}
{{ delivery_form.feature_id }}
</td>
<!-- Füge hier die übrigen Feldwerte hinzu -->
</tr>
{% endfor %}
</tbody>
</table>