Джанго, запрашивающий самореферентные отношения «многие ко многим» - PullRequest
0 голосов
/ 09 августа 2011

Я пытаюсь получить список всех рукописей в моей БД, распечатать метки для каждой из них, и в случае, если они связаны с другими рукописями, также распечатать метки этих рукописей.

Вот как выглядят мои модели:

class MSS(models.Model):
    shelfmark = models.CharField(max_length=50)
    MSSLink = models.ManyToManyField('self',through='MSSLink',symmetrical=False)
    [...]

class MSSLink(models.Model):
    link1 = models.ForeignKey('MSS', related_name='First_MSS')
    link2 = models.ForeignKey('MSS', related_name='Second_MSS')
    [...]

Вот код в views.py

def show_all_MSS(request):
    all_MSS = MSS.objects.select_related().all() # get all MSS     
    t = loader.get_template('list.html')
    c = Context({'all_MSS': all_MSS, })
    return HttpResponse(t.render(c))

Вопрос в том, что делать в моем шаблоне. Я думал о том, чтобы сделать что-то подобное, но я не знаю, как я могу проверить, была ли текущая MS в цикле for связана с другой MS, и если да, то как отобразить эти полки:

{% if all_MSS %}
    <ul>
    {% for i in all_MSS %}
        <li><a href="/MSS/{{ i.shelfmark}}/">{{ i.shelfmark }}</a></li>
            {% if i.MSSLink %}
            <p>This MS is linked to the following MSS: {{ i.MSSLink.link1 }}</p>
            {% endif %}
    {% endfor %}
    </ul>
{% else %}
    <p>No MSS found</p>
{% endif %}

1 Ответ

0 голосов
/ 09 августа 2011

Ваши модели немного сложны - вы, вероятно, можете избавиться от MSSLink:

class MSS(models.Model):
    shelfmark = models.CharField(max_length=50)
    links = models.ManyToManyField('self', symmetrical=False, blank=True)

    def __unicode__(self):
        return self.shelfmark

и добавьте это в свой шаблон:

{% if i.links.all %}
<ul>
    {% for l in i.links.all %}
        <li><a href="/MSS/{{ l.shelfmark}}/">{{ l.shelfmark }}</a></li>
    {% endfor %}
</ul>
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...