2011-07-18 25 views
6

Models.py:Como llegar modelos de Django valor del campo del objeto del modelo de etiquetas de plantilla

class Discussion(models.Model): 
    version = models.TextField(blank=True) 
    team = models.TextField(blank=True) 
    project = models.TextField(blank=True) 
    notes = models.TextField(db_column='Notes', blank=True) # Field name made lowercase. 
    s = models.TextField(blank=True) 
    send_mail_to = models.TextField(blank=True) 
    send_mail_cc = models.TextField(blank=True) 
    date = models.DateTimeField(null=True, blank=True) 

    class Meta: 
     db_table = u'discussion' 

views.py:

p=Discussion.objects.filter(version=m2) 
return render_to_response('report/t2',{"p":p}) 

Plantilla (html):

<tr> 
     <td width="20%" class="scratchblackfont12">Release Name :</td> 
     <td><div style="overflow:auto"><input name="Release Name (if any):" autocomplete="on" type="text" class="scratchsearchfield" elname="defaultFocus" id="r1" value="{{p.version}}" READONLY multiline="true" ></div> 
     </td> 
    </tr> 

Pero la plantilla muestra Nothing. Por favor, ayúdenme a resolver este problema. Deseo obtener el valor de campo del modelo del objeto modelo en la plantilla.

Respuesta

6

Eso es porque el p que está enviando a su vista es un QuerySet, no una instancia de objeto. Pruebe lo siguiente:

{% for p_object in p %} 
<tr> 
    <td width="20%" class="scratchblackfont12">Release Name :</td> 
    <td><div style="overflow:auto"><input name="Release Name (if any):" autocomplete="on" type="text" class="scratchsearchfield" elname="defaultFocus" id="r1" value="{{p_object.version}}" READONLY multiline="true" ></div> 
    </td> 
</tr> 
{% endfor %} 

Si desea enviar una instancia p objeto específico que tendría que hacer lo siguiente en su opinión:

p = Discussion.objects.get(version=m2) 

pero tenga en cuenta que get generará un error si la consulta devuelve más de un solo objeto con version = m2.

+0

Buena respuesta @rolling stone. Eché de menos por completo el hecho de que estaba usando el filtro en lugar de usar get. Voy a dejar de responder a las preguntas tan tarde :) – Brandon

+0

@Brandon jaja ¡deberías ver algunas de las otras respuestas que doy a altas horas de la noche! –

0

En su opinión, ha hecho referencia a Discusión1, que no es el nombre de su modelo (Discusión). Tampoco es obvio dónde se asigna el valor de m2.

Me gustaría verificar que:

objects = Discussion.objects.filter(version=m2) 

devuelve objetos de la cáscara. Como mínimo, obtendrá una lista vacía.

Nos ayuda mucho si formatea su código correctamente, además de proporcionar el contexto suficiente para que podamos decir de dónde vienen las cosas, qué es qué y así sucesivamente, con el fin de proporcionar una respuesta.

+0

Hola brandon discussion1 es un error tipográfico.m2 es una variable que contiene el valor de la versión. Lo intento en shell funciona correctamente. Por favor, ayúdame cómo puedo obtenerlo en la plantilla – shiva

+0

p = Discussion.objects.filter (version = m2) devuelve una lista de objetos. entonces p [0]. 'versión' da el resultado deseado.Desde mí siempre requirió un solo objeto como un tipo de retorno Yo uso p = Discussion.objects.get (version = m2) en la plantilla utilizo {{ p.version}} Funciona. Gracias Brandon por pasar tiempo conmigo – shiva

Cuestiones relacionadas