gpt4 book ai didi

django - 在基于 Django 类的 View 中使用 modelformset_factory

转载 作者:行者123 更新时间:2023-12-04 15:06:55 24 4
gpt4 key购买 nike

我正在构建一个 View ,可以让我同时更新多个对象上的多个字段。我正在使用 执行此操作ModelFormSet & modelformset_factory .

该模板将是一个表单表,字段左侧带有对象名称(见下图)。

enter image description here

我找到了 this例如,但我坚持如何实现基于类的 View 和模板。

我的表单集

class BaseFormSet(BaseModelFormSet):
def __init__(self, *args, **kwargs):
super(BaseFormSet, self).__init__(*args, **kwargs)
self.queryset = Reference.objects.filter(
start__isnull=True)


ReferenceFormSet = modelformset_factory(
Reference,
fields=('start', 'end'),
formset=BaseFormSet,
extra=0)

我的观点
class ReferenceFormSetView(LoginRequiredMixin, SuperuserRequiredMixin, FormView):
model = Reference
form_class = ReferenceFormSet
template_name = "references/references_form.html"

def form_valid(self, form):
for sub_form in form:
if sub_form.has_changed():
sub_form.save()

return super(ReferenceFormSetView, self).form_valid(form)

我的模板
{% extends "base.html" %}
{% load crispy_forms_tags %}

{% block content %}
<div class="container">
<h1>{{ headline }}</h1>
<div class="row">
<form action="" method="post">
{% crispy form %}
<div class="">
<input type="submit" value="Submit" />
</div>
</form>
</div>
</div>
{% endblock content %}

问题
  • form_class 中的 Formset 的 View 似乎很奇怪。有没有更好的方法来处理这个问题?
  • 如何访问实例名称以显示在表单中?
  • 最佳答案

    我找到了一个使用名为 django-extra-views 的包的解决方案.

    有一个类叫ModelFormSetView这正是我想要的。这是我的实现(简化)供其他人使用 -

    我的观点

    class ReferenceFormSetView(ModelFormSetView):
    model = Reference
    template_name = "references/references_form.html"
    fields = ['start', 'end']
    extra = 0

    def get_queryset(self):
    return self.model.objects.all()

    def get_success_url(self):
    return reverse('references:formset')

    def formset_valid(self, formset):
    """
    If the formset is valid redirect to the supplied URL
    """
    messages.success(self.request, "Updated")
    return HttpResponseRedirect(self.get_success_url())

    def formset_invalid(self, formset):
    """
    If the formset is invalid, re-render the context data with the
    data-filled formset and errors.
    """
    messages.error(self.request, "Error dummy")
    return self.render_to_response(self.get_context_data(formset=formset))

    我的模板
    <form class="" method="post">
    {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}
    <div class="">
    {% for field in form %}
    {{ field }}
    {% endfor %}
    </div>
    {% endfor %}
    <button type="submit" class="btn btn-primary">Save</button>
    </form>

    关于django - 在基于 Django 类的 View 中使用 modelformset_factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640900/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com