Accessing Many to Many relationship in Django

Обновить

November 2018

Просмотры

3k раз

2

Я создал несколько моделей, следующим образом:

страница

Галерея

Образ

Галерея и изображения разделяют многие ко многим отношений.

Страница может иметь 1 или 0 галерей.

Я создал галерею с несколькими изображениями и прикрепил его к объекту страницы.

Тем не менее, у меня возникают проблемы с отображением его в шаблоне.

Может кто-нибудь помочь?

На мой взгляд страница выглядит следующим образом:

def detail(request, page_id):
p = get_object_or_404(Page, pk=page_id)
return render_to_response('page/detail.html', {'page': p},
                      context_instance=RequestContext(request))

И шаблон:

{% block images %}
{% if page.gallery %}
{% for image in page.gallery.image_set.all %}
<a rel="gallery" href="{{ STATIC_URL }}{{ image.image }}"></a>
{% endfor %}
{% endif %}
{% endblock %}`

Если я пытаюсь вывести некоторый текст в IF блока он выходит в порядке, но не внутри цикла.

Любые советы о получении его на работу / как правило, это приведение в порядок до было бы весьма признателен.

Благодарю.

Dan

2 ответы

5

Если Gallery-Imageотношения многие ко многим я предполагаю , что у вас есть m2mполе на вашей Galleryмодели, где менеджер M2M является само поле. Менеджер может быть запрошен так же , как любой другой QuerySet: model_instance.mym2mfield.filter().

Если ваш ManyToManyFieldвызываются imagesна Galleryмодели, ваш шаблон будет выглядеть следующим образом :

{% for image in page.gallery.images.all %}
    <a rel="gallery" href="{{ STATIC_URL }}{{ image.image }}"></a>
{% endfor %}

Если ваш ManyToManyFieldна вашей Imageмодели, по умолчанию имя будет , как вы описываете, если не указан related_nameв этом случае вы будете использовать это имя.

{% for image in page.gallery.image_set.all %}
1

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

{{ page.gallery }}

Есть случаи, когда некоторые ошибки могут получить игнорируемые в шаблоне.

Кроме того, я немного любопытно, как связаны ваши страницы и галереи? Есть ли модель Page в OneToOneField под названием «Галерея»? Есть ли у галереи в ForeignKey на странице? В последнем случае, вы бы получить доступ к галереи, связанные со страницей по:

{{ page.gallery_set.all }}

Было бы легче ответить на этот вопрос, если вы предоставили некоторую дополнительную информацию о полях на вашей модели.