python - tutorial - Django relación de clave extranjera en plantilla
python django (2)
Si revisa la documentación de la clave externa , si tiene una relación como
Doc -> has many DocImages
necesita definir su clave externa en la clase DocImages de la siguiente manera:
class DocImage(models.Model):
property = models.ForeignKey(Doc, related_name=''images'')
Si no establece nombres relacionados, puede acceder a las DocImages desde el Doc como:
Doc.docimage_set.all()
Documentos sobre objetos relacionados
Pero la configuración de related_name
en el campo de propiedad te permite hacer
Doc.images.all()
Solo asegúrese de que todo lo que pase a la plantilla en el contexto de la vista coincida con lo que se usa en la plantilla, por ejemplo
# in the view
return render_to_response(''mytemplate.html'', { ''mydoc'' : doc, ''mydocimage'' : img }
Esto se puede utilizar en la plantilla de la siguiente manera:
# and in your template to get the images attached to the document
{% for i in mydoc.images.all %}
...
{% endfor %}
# or to get the document the image belongs to
{{ mydocimage.property.date_added }}
Sé que dirá que esta pregunta se ha hecho antes muchas veces, pero aún no la he resuelto ...
modelos.py
class Doc(UploadModel):
doc_no = models.CharField(max_length=100, verbose_name = "No", blank=True)
date_added = models.DateTimeField(verbose_name="Date", default=datetime.now,
editable=False)
class DocImage(models.Model):
property = models.ForeignKey(Doc, related_name=''images'')
image = FileBrowseField("Docs", max_length=200,
directory="doc_img/%Y/%m/%d/%H/%M/%S/",
extensions=[".jpg",".tif"], blank=True, null=True)
vistas.py
def doc_detail(request, dosc_no):
res = Doc.objects.filter(doc_no = dosc_no)
return render_to_response("doc/doc_detail.html", {"result": res})
plantillas:
{% for i in docimage.property_set.all %}
{{ i.image.url }}
{% endfor %}
He probado la plantilla anterior pero no obtuve ningún resultado. Así que quiero obtener una dirección imageurl en la clase DocImage ...
todo ayuda
- primero iteras sobre el resultado
- las imágenes relacionadas con un documento se recuperan mediante la propiedad images del documento que se genera a partir del atributo related_name en ForeignKey
código:
{% for doc in result %}
{% for docimage in doc.images.all %}
{{ docimage.image.url }}
{% endfor %}
{% endfor %}