Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django - How to delete a object directly from a button in a table

Tags:

django

(sorry for my bad english)

I need to delete an object, but directly from a list of the objects that y have in my template.

I have a work orders, that have spare parts but i don't know how to create the deleteview for the spare parts using only a buton in the detailview of the work order. The idea is that the user make click in the Delete button.

This is the model of the Spare Parts

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")

This is where is showed in the template

                  {% 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 %}

The the idea is use the to delete the spare part.

how i have to make the deleteview and the link to this???

Thanks!

like image 701
marcosgue Avatar asked May 29 '17 18:05

marcosgue


2 Answers

here in fa fa-thrash pass the id and the URL as I did it:-

{% 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 %}

ur url would be sonething like that:

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

in ur view:

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')
like image 145
Abi Waqas Avatar answered Sep 19 '22 01:09

Abi Waqas


In your html template inside for loop use the form tag inside <td> to create delete button as below (css class will work if you are using bootstrap3):

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

add urlpattern in urls.py

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

delete view will be like below in 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)

Note: import necessary imports shown in links or you need not to worry if you are using IDE such as pyCharm it will prompt you which import to make.

like image 45
Gahan Avatar answered Sep 20 '22 01:09

Gahan