form example createview django django-forms django-templates django-views django-generic-views

createview - formview django example



Django: ¿Puedo usar CreateView y DeleteView en la misma forma? (1)

Primero agregue todos los objetos existentes al contexto de CreateView y actualice la plantilla HTML para representarlos como una tabla sobre el formulario. Luego, cree una DeleteView y asigne una URL a ella.

URLs

url(r"^url_status/$", ProxyUrlCreateView.as_view(), name="proxy_url_status"), url(r"^url_status/(?P<pk>/d+)/delete/?$", DeleteProxyURLView.as_view(), name="delete_proxy"),

Puntos de vista

from django.views.generic import DeleteView from django.core.urlresolvers import reverse # add existing objects to the context, making them available to the template class ProxyUrlCreateView(CreateView): model = UrlStatus_Proxy template_name = "proxy_url_status.html" def get_success_url(self): return reverse("proxy_url_status") def get_context_data(self, **kwargs): kwargs["object_list"] = UrlStatus_Proxy.objects.all() return super(ProxyUrlCreateView, self).get_context_data(**kwargs) class DeleteProxyURLView(DeleteView): model = UrlStatus_Proxy def get_success_url(self): """ Redirect to the page listing all of the proxy urls """ return reverse("proxy_url_status") def get(self, *args, **kwargs): """ This has been overriden because by default DeleteView doesn''t work with GET requests """ return self.delete(*args, **kwargs)

Modelo

<table> {% for proxy_url in object_list %} <tr> <td>{{ proxy_url.urls }}</td> <td><a href="{% url delete_proxy %}">Delete</a></td> </tr> {% endfor %} </table> <form action="" method="post"> {{form.as_p}} <input type="submit" name="add" id="add"> </form>

Quiero mostrar dos botones en la misma forma, el primer botón que quiero usar para eliminar el objeto y el segundo botón para crear un objeto.

Por ejemplo, quiero crear un modelo simple como:

models.py:

class UrlStatus_Proxy(models.Model): urls = models.URLField(u''Site URL'', max_length=100, null=True, unique=True) status_url = models.CharField(u''Site'', max_length=20, choices=STATUS_URL)

urls.py

url(r''^url_status/$'',ProxyUrlCreateView.as_view(model=UrlStatus_Proxy, get_success_url=lambda: reverse(''proxy_url_status''),template_name=''proxy_url_status.html''), name=''proxy_url_status''),

proxy_url_status.html

<form action="" method="post"> {{form.as_p}} <input type="submit" name="delete" id="delete"> <input type="submit" name="add" id="add"> </form>

Si no tengo objetos en la base de datos, entonces no haga nada, solo visualice el formulario de Modelo, y tiene solo una opción para agregar un nuevo objeto en la base de datos.

Si tengo objetos en la base de datos, entonces enlista un objeto como tabla y en la tabla tengo un campo de casilla de verificación. Cuando revisé uno de los objetos y hago clic en el botón "eliminar" quiero eliminar ese objeto.

En el segundo caso, si relleno el campo de entrada del objeto y presiono el botón "agregar", quiero agregar el objeto en la base.

¿Cómo puedo hacerlo?