Как отобразить одного поставщика для связанного с ним продукта в django?

ну, я новичок, но новичок среднего уровня, и я создаю веб-сайт электронной коммерции. У меня есть поставщик, клиент и продукты, которые относятся к конкретному поставщику. Я сделал представление для отображения всех видов продуктов на странице, а также проанализировал модель поставщика в представлении продуктов. но я получаю от всех поставщиков один продукт, который показывает, что код работает не так, как должен был. Надеюсь, вы, ребята, поняли, что я хочу спросить? для удобства вот код.

просмотров.py:

def products(request):
    vendor = Vendor.objects.all()
    products_list = Item.objects.all()
    context = {
        'vendors': vendor,
        'products': products_list,
    }
    template = 'vstore/products.html'
    return render(request, template, context)

продукты.html:

<div class = "row">
        {% for item in products %}
        <div class = "col-3">
            <div class = "item">
                <div class = "strip">
                    <figure>
                        {% if item.discount >= 20 %}
                        <span class = "ribbon off">{{item.discount}}% OFF</span>
                        <a href = "{% url 'product_detail_view' item.pk %}" class = "strip_info">
                            <img class = "" src = "{{ item.image.url }}" alt = "Vendor's Photo">
                        </a>
                        {% else %}
                        <a href = "{% url 'product_detail_view' item.pk %}" class = "strip_info">
                            <img class = "" src = "{{ item.image.url }}" alt = "Vendor's Photo">
                        </a>
                        {% endif %}
                    </figure>
                    <ul>
                        <li><span class = "loc_open">{{ item.name }}</span></li>
                        <li>
                            <div class = "score "><div class = "score "><span class = "">{% for vendor in vendors %}{{vendor.name}}{% endfor %}<h5><div class = "item_title"><small>AED {{item.price}}</small></div></h5></span><strong>C</strong></div></div>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
        {% endfor %}

    </div>

мои модели.py:

class Vendor(models.Model):  # this is to create a new model for restaurant
    user = models.OneToOneField(User, on_delete=models.CASCADE,
                                related_name='vstore')  # OneToOneField  is to ensure that one user have only one restarant.
    name = models.CharField(max_length=500)
    phone = models.CharField(max_length=500)
    address = models.CharField(max_length=500)
    logo = models.ImageField(upload_to='vstore_logo/', blank=False)

    def __str__(self):
        return self.name

class Item(models.Model):
    vstore = models.ForeignKey(Vendor, on_delete=models.CASCADE)
    category = models.ForeignKey(Categories, on_delete=models.CASCADE)
    childcategory = models.ForeignKey(ChildCategories, on_delete=models.CASCADE)
    subchildcategory = models.ForeignKey(SubChildCategories, on_delete=models.CASCADE)
    name = models.CharField(max_length=500)
    short_description = models.CharField(max_length=82)
    image = models.ImageField(upload_to='Sheesha_images/', blank=False)
    price = models.IntegerField(default=0)
    discount = models.IntegerField(default=0, null=True, blank=True)
    long_description = models.TextField(max_length=500, null=True, blank=True)
    weight = models.IntegerField(null=True, blank=True)
    size = models.IntegerField(null=True, blank=True)
    base = models.IntegerField(null=True, blank=True)
    quantity = models.IntegerField(default=1)

    def __str__(self):
        return self.name

        

Вы хотите перечислить поставщиков, связанных с этим товаром, верно? Можете ли вы поделиться своими моделями, чтобы мы могли увидеть, какие отношения между ними?

Ogulcan Olguner 12.12.2020 23:46

Я публикую свои модели в разделе комментариев одну за другой.

djangodeveloper 13.12.2020 12:48

Я отредактировал свой вопрос. теперь вы можете проверить и мои модели.

djangodeveloper 13.12.2020 12:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
927
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете получить доступ к объекту продавца, связанному с этим товаром {{item.vstore.name}}. Поэтому я думаю, что это сработает, если вы обновите свой код следующим образом;

<div class = "row">
        {% for item in products %}
        <div class = "col-3">
            <div class = "item">
                <div class = "strip">
                    <figure>
                        {% if item.discount >= 20 %}
                        <span class = "ribbon off">{{item.discount}}% OFF</span>
                        <a href = "{% url 'product_detail_view' item.pk %}" class = "strip_info">
                            <img class = "" src = "{{ item.image.url }}" alt = "Vendor's Photo">
                        </a>
                        {% else %}
                        <a href = "{% url 'product_detail_view' item.pk %}" class = "strip_info">
                            <img class = "" src = "{{ item.image.url }}" alt = "Vendor's Photo">
                        </a>
                        {% endif %}
                    </figure>
                    <ul>
                        <li><span class = "loc_open">{{ item.name }}</span></li>
                        <li>
                            <div class = "score "><div class = "score "><span class = "">{{item.vstore.name}}<h5><div class = "item_title"><small>AED {{item.price}}</small></div></h5></span><strong>C</strong></div></div>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
        {% endfor %}

    </div>

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

djangodeveloper 14.12.2020 08:18

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

djangodeveloper 14.12.2020 08:26

но я думал, что его нужно повторить, а затем отобразить имя поставщика?

djangodeveloper 14.12.2020 08:28

можете ли вы объяснить свое решение, пожалуйста?

djangodeveloper 14.12.2020 08:29

Внешний ключ на самом деле означает отношение «многие к одному». В вашем примере Vendor находится на многих, а Item — на одной стороне. Таким образом, у объекта Item может быть только один Vendor, а у Vendor может быть более одного Item. Django позволяет вам получить доступ к поставщику как к атрибуту в его ORM. Таким образом, вы можете получить доступ к единственному объекту Vendor, связанному с ним, из объекта Item, как указано выше. Вы можете использовать его таким же образом в шаблоне Django. Вы можете прочитать документацию для получения дополнительной информации.

Ogulcan Olguner 14.12.2020 11:57

Другие вопросы по теме