web-dev-qa-db-fra.com

Django relation de clé étrangère dans le modèle

je sais que vous direz que cette question est posée plusieurs fois mais je ne l'ai pas encore résolue ...

models.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)

views.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})

modèles:

{% for i in docimage.property_set.all %}

{{ i.image.url }}  

{% endfor %}

j'ai essayé le modèle ci-dessus mais je n'ai obtenu aucun résultat. donc je veux obtenir l'adresse imageurl dans la classe DocImage ...

tout aide

21
Aragon

Si vous passez en revue la documentation de clé étrangère , si vous avez une relation comme

Doc -> has many DocImages

vous devez définir votre clé étrangère sur la classe DocImages comme ceci:

class DocImage(models.Model):
    property = models.ForeignKey(Doc, related_name='images')

Si vous ne définissez pas de noms associés, vous pouvez accéder aux DocImages à partir du Doc comme:

Doc.docimage_set.all()

Documents sur Objets associés

Mais en définissant related_name dans le champ de propriété vous permet de faire

Doc.images.all()

Assurez-vous simplement que tout ce que vous transmettez au modèle dans le contexte de la vue correspond à ce qui est utilisé dans le modèle, par exemple.

# in the view
return render_to_response('mytemplate.html', { 'mydoc' : doc, 'mydocimage' : img }

Cela peut ensuite être utilisé dans le modèle comme suit:

# 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 }}
38
will-hart
  • vous parcourez d'abord le résultat
  • les images liées à un Doc sont récupérées par la propriété images de doc qui est générée à partir de l'attribut related_name dans ForeignKey

code:

{% for doc in result %}
  {% for docimage in doc.images.all %}
    {{ docimage.image.url }}
  {% endfor %}
{% endfor %}
6
Christian Thieme