Получение списка связанных моделей из списка объектов (связанных внешним ключом).Джанго - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть два очень простых класса для продуктов и фотографий.Я хотел бы представить товары на главной странице моего магазина вместе с фотографиями, связанными с внешним ключом.Но я не знаю, как это сделать, я нашел много ответов, чтобы получить это в представлении, используя соединение типа «prefetch_related», но мой идентификатор меняется для каждого случая.Итак, как вы представляете свои фотографии для каждого продукта?Есть ли какие-либо теги Django, о которых я не знаю?

my models.py

class Product(models.Model)
    name = models.CharField(max_length=10)

class Image(models.Model)
    image = models.ImageField()
    name_related = models.ForeignKay(Product, on_delate=models.CASCADE)

views.py

def home(request):
    product_list = Product.objects.all()[:12]
    #img = ??
    context = {'product_list': product_list,
               }
    return render(request, 'home.html', context)

home.html

{% for product in product_list %}
{{ product.name }}
<!-- {{ product.imge }} ' element presenting the first photo for each 'product' model'???-->
{% endfor %}

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

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

Связанные модели уже доступны из родительской модели, не делая ничего явного.

ВВ вашем шаблоне вы можете сделать это:

{% for product in product_list %}
    {{ product.name }}
    {% for product_image in product.image.all %}
        <!-- Iterate through this products related images -->
        {{ product_image.image.url }}
    {% endfor %}
{% endfor %}

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

product_list = Product.objects.all().prefetch_related('image')[:12]
0 голосов
/ 13 февраля 2019

Просто сделай

{% for product in product_list %}
    {{ product.name }}
    {% for image in product.image.all %} 
        <!-- {{ image.image.url }} -->?
    {% endfor %}
{% endfor %}
...