2013-10-16 13 views
8

Ricevo quell'errore quando provo a visitare la pagina dei dettagli del mio modello di prodotto. Ho il campo di lumaca nel file url, ma non sembra avere importanza.La vista dettagli generica deve essere richiamata con un oggetto pk o una lumaca

Modello

class Product(models.Model): 
    product_name= models.CharField(max_length=30, blank=False, null=False, verbose_name="the product name") 
    product_slug= models.SlugField(max_length=30, blank=False, null=False, verbose_name="the product slug") 
    product_excerpt= models.CharField(max_length=100, blank=False, null=False, verbose_name="product excerpt") 
    def _set_product_code(self): 
     product_code_temp = hashlib.sha224() 
     product_hash = self.product_name 
     product_hash = product_hash.encode('utf-8') 
     product_code_temp.update(product_hash) 
     return product_code_temp.hexdigest()[0:5] 
product_code = property(_set_product_code) 

View

class ProductPage(DetailView): 
    model = Product 
    context_object_name = 'product' 
    template_name="product.html" 

URL

url(r'^product/(?P<product_slug>\w+)/(?P<product_code>\w+)/$', ProductPage.as_view(), name="product"), 

Qualcuno può individuare ciò che sto facendo male?

risposta

15

Impostare l'attributo slug_field sulla classe di visualizzazione:

class ProductPage(DetailView): 
    model = Product 
    slug_field = 'product_slug' 
    # etc 
4

Vorrei aggiungere che get_object potrebbe essere utilizzato anche nel caso in cui abbiamo una diversa guardare in alto parametro per la chiave primaria

Esempio , se voglio ottenere il mio oggetto per guid, che sto passando nel mio URLConf

def get_object(self): 
    return Product.objects.get(guid=self.kwargs.get("guid"))