ну, я новичок, но новичок среднего уровня, и я создаю веб-сайт электронной коммерции. У меня есть поставщик, клиент и продукты, которые относятся к конкретному поставщику. Я сделал представление для отображения всех видов продуктов на странице, а также проанализировал модель поставщика в представлении продуктов. но я получаю от всех поставщиков один продукт, который показывает, что код работает не так, как должен был. Надеюсь, вы, ребята, поняли, что я хочу спросить? для удобства вот код.
просмотров.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
Я публикую свои модели в разделе комментариев одну за другой.
Я отредактировал свой вопрос. теперь вы можете проверить и мои модели.
Вы можете получить доступ к объекту продавца, связанному с этим товаром {{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>
сэр ничего не случилось. показывая мне тот же ответ.
Простите, сэр. он работал с методом, который вы упомянули в своем ответе.
но я думал, что его нужно повторить, а затем отобразить имя поставщика?
можете ли вы объяснить свое решение, пожалуйста?
Внешний ключ на самом деле означает отношение «многие к одному». В вашем примере Vendor находится на многих, а Item — на одной стороне. Таким образом, у объекта Item может быть только один Vendor, а у Vendor может быть более одного Item. Django позволяет вам получить доступ к поставщику как к атрибуту в его ORM. Таким образом, вы можете получить доступ к единственному объекту Vendor, связанному с ним, из объекта Item, как указано выше. Вы можете использовать его таким же образом в шаблоне Django. Вы можете прочитать документацию для получения дополнительной информации.
Вы хотите перечислить поставщиков, связанных с этим товаром, верно? Можете ли вы поделиться своими моделями, чтобы мы могли увидеть, какие отношения между ними?