Django: отображаемое значение шаблона от многих ко многим через таблицу - PullRequest
0 голосов
/ 25 октября 2018

У меня есть 3 модели, и я пытаюсь получить доступ и отобразить данные из таблицы «Сквозь» в отношении «многие ко многим» (Джанго).

Я пытаюсь отобразить 3 вещи:

  • изображение произведения,
  • используемый язык перевода
  • переведенное название произведения

Я отказываюсь делать последнееодин.Это из "сквозной" связи отношения многих ко многим);Есть идеи?

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

Шаблон (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

Я много чего пробовал в Translated name : {{ ### }}, но, похоже, ничегоРабота;я не на той дороге?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы не можете ссылаться на атрибуты сквозной модели при доступе к связанным экземплярам, ​​связанным с менеджером поля «многие ко многим».Вы можете использовать значение по умолчанию related_name fk в сквозной модели, однако:

{% 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 %}
0 голосов
/ 25 октября 2018

Как я уже сказал в комментарии, вы должны следить за отношением к 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 %}
...