Django Dynami c Проблема с фильтрацией объектов в шаблоне - PullRequest
1 голос
/ 26 апреля 2020

У меня есть страница, на которой перечислены сообщения вместе с фотографиями, связанными с каждым сообщением. Однако у меня возникают проблемы с фильтрацией и отправкой фотографий из списков фотографий QuerySet, так как он используется в l oop набора запросов списка сообщений. Любая идея, как запустить фильтры для получения фотографий в качестве только связанной записи в шаблоне?

<h2> Posts: </h2>
{% for post in post_list %}

     {% include 'posts/list-inline.html' with post_whole=post  post_photos=photo_list %}

{% endfor %}

Здесь из photo_list нужно отфильтровать несколько объектов, имеющих отношение внешнего ключа к отдельной записи. Фильтр QuerySet здесь не работает в шаблоне.

Обновление: сжатые модели для справки:

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post_text = models.CharField(max_length=5000, null=True, blank=True)
    selection = models.ForeignKey(Selection, null=True, blank=False, on_delete=models.SET_NULL)
    timestamp = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

class PostPhoto(models.Model):
    # to apply multiple photos to same post id
    post_id = models.ForeignKey(Post, null=True, blank=True, on_delete=models.CASCADE)
    photo = models.ImageField(upload_to='img/', blank=True, null=True)
    thumbnail = models.ImageField(upload_to='tmb/', null=True, blank=True, editable=False)

1 Ответ

2 голосов
/ 26 апреля 2020

Вы можете получить списки связанных PostPhoto объектов с:

mypost<b>.postphoto_set.all()</b>

Таким образом, в вашем шаблоне вы можете отобразить это с помощью:

<h2> Posts: </h2>
{% for post in post_list %}
     {% include 'posts/list-inline.html' with post_whole=post  post_photos=<b>post.postphoto_set.all</b> %}
{% endfor %}

(без скобок, поскольку шаблон будет автоматически вызывать вызываемый объект).

Чтобы избежать проблемы N + 1 , в представлении лучше извлечь Post s с помощью .prefetch_related(..) пункт [Django -doc] :

posts = Post.objects<b>.prefetch_related('postphoto_set')</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...