Django - 如何直接从表中的按钮删除对象

mar*_*gue 6 django

(对不起,我的英语不好)

我需要删除一个对象,但直接从模板中的对象列表中删除。

我有一个工作订单,其中有备件,但我不知道如何仅使用工作订单明细视图中的按钮为备件创建删除视图。这个想法是用户点击删除按钮。

这是备件模型

class OrderSparePart(models.Model):
    # Relations
    workorder = models.ForeignKey(
            WorkOrder,
            verbose_name=_('order'),
        )
    # Attributes - Mandatory
    spare_part = models.CharField(
            max_length=80,
            verbose_name=_('spare part'),
        )
    # Attributes - Optional
    price = models.DecimalField(
            max_digits=6,
            decimal_places=2,
            null=True,
            blank=True,
            verbose_name=_('price'),
        ) 
    # Object Manager
    # Custom Properties
    # Methods
    def get_absolute_url(self):
        return reverse('work_orders:detail', kwargs={'order_id': self.workorder.id})

    # Meta and String
    class Meta:
        verbose_name = _("order spare part")
        verbose_name_plural = _("order spare parts")
Run Code Online (Sandbox Code Playgroud)

这是模板中显示的位置

                  {% if spare_parts %}
                  <table class="table">
                    <thead>
                      <tr>
                        <th>{% trans "Spare Part" %}</th>
                        <th>{% trans "Price" %}</th>
                        <th>{% trans "Delete" %}</th>
                      </tr>
                    </thead>
                    <tbody>
                      {% for part in spare_parts %}
                      <tr>
                        <td><i class="fa fa-gear"></i> {{ part.spare_part }}</td>
                        {% if part.price %}
                        <td>$ {{ part.price }}</td>
                        {% else %}
                        <td></td>
                        {% endif %}
                        <td><a href="#"><i class="fa fa-trash"></i></a></td>
                      </tr>
                      {% endfor %}
                    </tbody>
                  </table>
                {% else %}
                <p>NO HAY REPUESTOS ASENTADOS AÚN</p>
                {% endif %}
Run Code Online (Sandbox Code Playgroud)

这个想法是使用 删除备件。

我必须如何制作删除视图和指向此的链接???

谢谢!

Abi*_*qas 5

在 fa fa-thrash 中,像我一样传递 id 和 URL:-

{% if spare_parts %}
              <table class="table">
                <thead>
                  <tr>
                    <th>{% trans "Spare Part" %}</th>
                    <th>{% trans "Price" %}</th>
                    <th>{% trans "Delete" %}</th>
                  </tr>
                </thead>
                <tbody>
                  {% for part in spare_parts %}
                  <tr>
                    <td><i class="fa fa-gear"></i> {{ part.spare_part }}</td>
                    {% if part.price %}
                    <td>$ {{ part.price }}</td>
                    {% else %}
                    <td></td>
                    {% endif %}
                    <td><a href="url:delete_view" part.id><i class="fa fa-trash"></i></a></td>
                  </tr>
                  {% endfor %}
                </tbody>
              </table>
            {% else %}
            <p>NO HAY REPUESTOS ASENTADOS AÚN</p>
            {% endif %}
Run Code Online (Sandbox Code Playgroud)

你的网址会是这样的:

url(r'^delete/(?P<part_id>[0-9]+)/$', view.function, name='delete_view'),
Run Code Online (Sandbox Code Playgroud)

在你看来:

def function(request,part_id =None):
    object = YourModel.objects.get(id=part_id)
    object.delete()
    return render(request,'ur template where you want to redirect')
Run Code Online (Sandbox Code Playgroud)


Gah*_*han 5

在for 循环内的html 模板中,使用里面的 form 标签<td>创建删除按钮,如下所示(如果您使用的是 bootstrap3,css 类将起作用):

<form action="{% url 'delete_view' pk=part.pk %}" method="POST">
  {% csrf_token %}
  <input class="btn btn-default btn-danger" type="submit" value="Delete"/>
</form>
Run Code Online (Sandbox Code Playgroud)

urls.py 中添加 urlpattern

url(r'^delete-entry/(?P<pk>\d+)/$', views.DeleteView.as_view(), name='delete_view'),
Run Code Online (Sandbox Code Playgroud)

删除视图将在views.py 中如下所示

class DeleteView(SuccessMessageMixin, DeleteView):
model = OrderSparePart
success_url = '/'
success_message = "deleted..."

def delete(self, request, *args, **kwargs):
    self.object = self.get_object()
    name = self.object.name
    request.session['name'] = name  # name will be change according to your need
    message = request.session['name'] + ' deleted successfully'
    messages.success(self.request, message)
    return super(DeleteView, self).delete(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

注意:导入链接中显示的必要导入,或者您不必担心如果您使用的是 pyCharm 等 IDE,它会提示您进行哪个导入。