5

Ho un modello che voglio visualizzare come vista di dettaglio, ho creato una vista elenco che ha un collegamento che porta alla sua vista dettagliata. I dont ottenere gli eventuali errori, ma il modello non rende uno dei modelli dettagli Link detailviewDetailView modello che non visualizza i dati del modello

<a href="../ancillaries/{{ Ancillary.id }}" > Product </a> 

Modello

from django.db import models 
from django.core.urlresolvers import reverse 

class Ancillary(models.Model): 
    product_code = models.CharField(max_length=60, null=True) 
    type = models.CharField(max_length=120, null=True) 
    product = models.CharField(max_length=120, null=True) 
    standard = models.CharField(max_length=120, null=True) 
    measurement = models.CharField(max_length=120, null=True) 
    brand = models.CharField(max_length=120, null=True) 

    class Meta: 
      verbose_name_plural = "Ancillaries" 
    def get_absolute_url(self): 
      return reverse('ancillaries') 
    def __unicode__(self): 
      return u'%s %s %s %s %s %s %s' % (self.id, self.product_code, self.type, 
           self.product, self.standard, 
           self.measurement, self.brand) 

View

class AncillaryDetail(DetailView): 
    model = Ancillary 
    def get_context_data(self, **kwargs): 

     context = super(AncillaryDetail, self).get_context_data(**kwargs) 

     context['ancillary_list'] = Ancillary.objects.all() 
     return context 

Urls

url(r'^ancillaries/(?P<pk>\d+)/', AncillaryDetail.as_view(template_name='ancillary-detail.html')), 

Template

{% for ancillary_list in object_list %} 
{{ Ancillary.product}} 
{{ Ancillary.type }} 
{{ Ancillary.brand }} 
{{ Ancillary.measurement }} 
{% endfor %} 
+0

Il modello sopra appare come una vista elenco. Quale modello stai usando per la tua vista di dettaglio e perché stai aggiungendo tutti gli oggetti nel contesto di dettaglio? – AndrewS

+0

Oh no, il modello sopra è quello che ho usato per la vista di dettaglio. Non sapevo quale modello utilizzare per visualizzare i dati della vista di dettaglio. – vvdect

risposta

12

Sembra come se hai usato lo documentation ma adattato l'esempio ListView in modo errato. Se si desidera visualizzare una singola istanza di modello, allora la DetailView è la vista corretta.

Come suggerito da @mrkre, dovresti nominare il tuo pattern URL (anche se userei il modulo singolare per il nome).

url(r'^ancillaries/(?P<pk>\d+)/', AncillaryDetail.as_view(
       template_name='ancillary-detail.html'), name="ancillary_detail") 

la vista è poi semplicemente

class AncillaryDetail(DetailView): 
    model = Ancillary 

Nel modello ancillary-detail.html si accede l'istanza modello utilizzando il nome predefinito object.

{{ object.product}} 
{{ object.type }} 
{{ object.brand }} 
{{ object.measurement }} 
+0

Vedere il commento di Berislav Lopac nella risposta, qui sotto, credo che si applichi anche a questa risposta.\t "Vorrei solo aggiungere che dovresti evitare di inserire template_name in URLconf - piuttosto, mettilo nella definizione di AncillaryDetail, proprio sotto l'attributo model." – IonicBurger

4

Prova:

{% for ancillary in ancillary_list %} 
    {{ ancillary.product}} 
    {{ ancillary.type }} 
    {{ ancillary.brand }} 
    {{ ancillary.measurement }} 
{% endfor %} 

Io suggerirei di usare i nomi per url:

url(r'^ancillaries/(?P<pk>\d+)/', AncillaryDetail.as_view(), name="ancillary_details") 

<a href="{% url 'ancillary_details' pk=ancillary.pk %}"> 

Luogo questo subito dopo l'detailview

template_name='ancillary-detail.html' 
+4

Vorrei solo aggiungere che dovresti evitare di inserire 'template_name' in URLconf - piuttosto, mettilo nella definizione di' AncillaryDetail', proprio sotto l'attributo 'model'. –

+0

Sono d'accordo, questo è quello che faccio anch'io. Risposta modificata – mrkre

+0

@BerislavLopac - questo non consente un maggiore controllo sull'URL/template in modo simile a Flask? In altre parole, consentendo una mappatura uno a uno? – IonicBurger