2011-04-25 7 views
8

Me preguntaba si era posible usar algo además de un pk o slug cuando está utilizando un DetailView en Django 1.3.Cómo especificar algo distinto de pk o slug para DetailView

Por ejemplo, tengo actualmente:

url(r'^mymodel/(?P<pk>\d+)/$', MyDetailView.as_view()) 

como mi url. Digamos que quería algo como:

url(r'^mymodel/(?P<name>\d+)/$', MyDetailView.as_view()) 

donde el nombre sería un campo en el modelo. ¿Hay alguna forma de tener el uso de DetailView para 'agarrar' el objeto que quiero y pasarlo a mi plantilla?

Respuesta

13

Una babosa no tiene ningún significado particular en Django. Es solo un nombre para un campo que identifica una fila. Si su babosa se llama algo más, por ejemplo name, simplemente especifique name como el atributo slug_field en su subclase de vista.

Si necesita algo más complicado, siempre puede anular get_object en la clase de vista.

+0

Anulación i s todo lo que necesitaba hacer aquí. ¡Gracias! –

+1

también tenga en cuenta que su línea de url debe verse como: url (r '^ mymodel/(? P \ d +)/$', MyDetailView.as_view()) – mpaf

+0

Puede establecer 'slug_url_kwarg' además de' slug_field' para que su parámetro nombrado no es "slug" como lo sugirió el usuario mpaf. – pymarco

0

Puede utilizar el atributo "pk_url_kwarg"


urls.py

url(r'^mymodel/(?P<name>\d+)/$', MyDetailView.as_view()) 


views.py

class MyDetailView(LoginRequiredMixin, DetailView): 
    model = ModelName 
    pk_url_kwarg = "name" # primary key(to identify object uniquely) 
    template_name = "template.html" 

de diseño de referencia vista UML http://epydoc.pythondiary.com/generic-views/ (click en la vista de detalle)

Cuestiones relacionadas