I have 3 models and I'm trying to acces and display datas from the "through" table on a many-to-many relation (Django).
I try to display 3 things :
I'm failling to do the last one. It it from the "through" link of the many to many relation); any idea ?
Models.py :
class Language(models.Model):
LANG = (
('FR', 'FR'),
('EN', 'EN'),
)
lang_selected = models.CharField(max_length=3, choices=LANG, verbose_name='Availlable language')
def __str__(self):
return self.lang_selected
class Artwork(models.Model):
artwork_image = models.CharField(max_length=100, null=True, verbose_name="Artwork image")
version = models.ManyToManyField(Language, through='Artwork_language', verbose_name="link artwork -> language")
def __str__(self):
return self.artwork_image
class Artwork_language(models.Model):
Artwork = models.ForeignKey(Artwork, on_delete=models.CASCADE)
Language = models.ForeignKey(Language, on_delete=models.CASCADE)
artwork_name = models.CharField(max_length=100, null=True, verbose_name="Artwork name")
def __str__(self):
return str(self.Artwork) + " translated to " + str(self.Language)
views.py
class Accueil(TemplateView):
template_name = 'isa/accueil.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['artwork'] = Artwork.objects.all()
context['language'] = Language.objects.all()
context['artwork_language'] = Artwork_language.objects.all()
return context
Template (accueil.html)
<h1>Image | Language translation | Translated name</h1>
{% for artwork in artwork %}
Image : {{ artwork.artwork_image }} <br/>
{% for lang in artwork.version.all %}
Language translation : {{ lang }} <br/>
Translated name : {{ ### }}
{% for i in lang.artwork_language %}
{{ i.artwork_name }}
{% endfor %}
<br/>
{% endfor %}
I tried a lot of thing in the Translated name : {{ ### }}
but nothing seem to work; am i totaly on the wrong road ?
As I said in the comment, you should follow the relationship to Artwork_language, and then the FK to Language from there:
{% for artwork_lang in artwork.artwork_language_set.all %}
Language translation : {{ artwork_lang.Language }} <br/>
Translated name : {{ artwork_lang.artwork_name }}
{% endfor %}