Django:通过标签页显示从多到多的模板值

2024-06-26 13:56:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个模型,我试图访问并显示多对多关系(Django)上“through”表中的数据。在

我试着展示三件事:

  • 艺术品图像
  • 使用的翻译语言
  • 艺术品的翻译名称

我没能做最后一个。它来自多对多关系的“贯通”链接);有什么想法吗?在

模型.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)

视图.py

^{pr2}$

模板(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 %}

preview

我试了很多东西,但似乎都没用,我是不是走错了路?在


Tags: nameimageselflangverbosemodelmodelslanguage
2条回答

正如我在评论中所说,你应该遵循与Artwork_language的关系,然后从FK到language:

{% for artwork_lang in artwork.artwork_language_set.all %}
    Language translation :  {{ artwork_lang.Language }}  <br/>
    Translated name :  {{ artwork_lang.artwork_name }}
{% endfor %}

访问多对多字段的相关管理器时,不能引用through模型的属性。您可以在through模型中使用fk的默认related_name,但是:

{% for art_lang in artwork.artwork_language_set.all %}
     Language translation :  {{ art_lang.Language }}  <br/>
     Translated name :  {{ art_lang.artwork_name }}
     {% for i in art_lang.Language.artwork_language_set.all %}
         {{ i.artwork_name }}
     {% endfor %}
     <br/>
{% endfor %}

相关问题 更多 >