【问题标题】:Django Crud Operations in Single View单一视图中的 Django Crud 操作
【发布时间】:2016-03-12 20:04:42
【问题描述】:

我的在线营销部门跟踪数千行电子邮件和分析营销数据,我正在构建一个工具,我们可以在内部使用它来管理数据,以便我们可以运行多个查询来生成报告。

CRUD 操作正常工作,但是要输入的数据太多,拥有ticket_form.html、ticket_list.html 和ticket_confirm_delete.html 视图和模板效率低下。我的列表数据是表格格式,所以我想做的是将操作组合在一个视图下,这样我就可以在表格的末尾添加一个带有图标的列来添加、更新和删除行。感谢您的帮助。

我目前的观点,我想结合:

class TrafficForm(ModelForm):
    class Meta:
        model = Traffic
        fields = ['sessions', 'new_users', 'reminder', 'campaigns', 'new_sales', 'sales_renewals']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['sessions'].widget.attrs.update({
            'placeholder': 'Sessions',
            ...
        })

        for field in iter(self.fields):
            self.fields[field].widget.attrs.update({
                'class': 'form-control placeholder-no-fix'
            })


def traffic_create(request, template_name='traffic_form.html'):
    form = TrafficForm(request.POST or None)
    if form.is_valid():
        form.save()
        return redirect('traffic_list')
    return render(request, template_name, {'form': form})


def traffic_list(request, template_name='traffic_list.html'):
    traffic = Traffic.objects.all()
    data = {}
    data['object_list'] = traffic
    return render(request, template_name, data)


def traffic_update(request, pk, template_name='traffic_form.html'):
    traffic = get_object_or_404(Traffic, pk=pk)
    form = TrafficForm(request.POST or None, instance=traffic)
    if form.is_valid():
        form.save()
        return redirect('traffic_list')
    return render(request, template_name, {'form': form})


def traffic_delete(request, pk, template_name='traffic_confirm_delete.html'):
    traffic = get_object_or_404(Traffic, pk=pk)
    if request.method == 'POST':
        traffic.delete()
        return redirect('traffic_list')
    return render(request, template_name, {'object': traffic})

【问题讨论】:

标签: django django-models django-forms django-templates django-views


【解决方案1】:

参考以下代码

class TrafficForm(ModelForm):
  def get_absolute_url(self):
     #return edit url

  def get_delete_url(self):
     #return delete url

查看功能

 def crud_traffic_view(request, template_name= "crud_traffic.html"):
    all_objects = Traffic.objects.all()
    form = TrafficForm()
    context_dict = {"form" : form, "all_objects" : all_objects}
    return render(request, template_name, {'all_objects' : all_objects})

模板

 <table>
  {% for traffic in all_objects %}
    <tr>
    <td>{{traffic.details}}  </td>
    <td><a href="{{traffic.get_absolute_url}}">Edit</a></td>
    <td><a href="{{traffic.get_delete_url}}"> Delete</a></td>
    </tr>
  {% endfor %}
 </table>
 <form action="{% url 'add_traffic' %}" method="POST">
    {% csrf %} {{form}}
    ...
 </form>

这将使您可以从一个页面管理所有内容(仅转到另一个页面进行编辑/删除确认)。

如果您想让模板更快,您可以添加 ajax 调用来更新模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2020-05-07
    • 2011-12-11
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多