Я работаю над приложением Django, в котором у меня есть модель продукта со связью «многие ко многим» и моделью цвета. Я хочу отображать все цвета, связанные с вариантом продукта, на его странице сведений. Однако когда я нажимаю на определенный цвет (например, белый), на странице отображается только этот цвет, а не все доступные цвета для варианта продукта.
Вот соответствующий код:
Модели:
class Color(models.Model):
code = models.CharField(max_length=7) # Hex color code
image = models.ImageField(upload_to='colors/') # Image field for color representation
product_varients = models.ManyToManyField('Product', related_name='color_variants', blank=True)
class Product(models.Model):
pid = ShortUUIDField(length=10, max_length=100, prefix="prd", alphabet="abcdef")
user = models.ForeignKey(CustomUser , on_delete=models.SET_NULL, null=True)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, related_name="category")
color = models.ManyToManyField(Color, blank=True)
Функция просмотра:
def product_varient_detail_view(request, pid):
try:
product_variant = Product.objects.get(pid=pid)
except Product.DoesNotExist:
return render(request, "core/error_page.html")
wishlist = wishlist_model.objects.filter(user=request.user) if request.user.is_authenticated else None
sub_category = SubCategory.objects.all()
categories = Category.objects.prefetch_related('subcategories').order_by('?')[:4]
nav_category = Category.objects.filter(special_category=True).prefetch_related('subcategories').order_by('?')[:4]
# Initialize variables
colors = product_variant.color_variants.all() # Get the colors of the product variant
linked_colors = set() # Use a set to avoid duplicates
# Get linked colors
for color in colors:
for linked_product in color.product_varients.exclude(id=product_variant.id): # Exclude current product
linked_colors.update(linked_product.color_variants.all()) # Update the set with linked product colors
# Convert linked_colors back to a list for the template
linked_colors = list(linked_colors)
sizes = product_variant.size.filter(product=product_variant)
p_image = product_variant.p_images.filter(product=product_variant)
# Getting review
reviews = ProductReview.objects.filter(product=product_variant)
review_count = reviews.count()
average_rating = ProductReview.objects.filter(product=product_variant).aggregate(rating=Avg('rating'))
# Product Review Form
review_form = ProductReviewForm()
if request.GET.get('color'):
color_id = request.GET.get('color')
color = Color.objects.get(coid=color_id)
product_varient = color.product_varients.first()
if product_varient:
return redirect('core:product_varient_detail', pid=product_varient.pid)
try:
product_p = Product.objects.get(pid=pid)
context1 = {'product_p': product_p}
if request.GET.get('size'):
size_name = request.GET.get('size')
size_object = Size.objects.get(name=size_name)
price = product_variant.get_product_price_by_size(size_object)
context1['selected_size'] = size_name
context1['updated_price'] = price
except Exception as e:
print(e)
return render(request, "core/error_page.html")
main_product_color = product_variant.main_product_color
context = {
"p": product_variant,
"w": wishlist,
"p_image": p_image,
"sub_category": sub_category,
"categories": categories,
"nav_category": nav_category,
'colors': colors,
'linked_colors': linked_colors,
'sizes': sizes,
'reviews': reviews,
'review_count': review_count,
'average_rating': average_rating,
'review_form': review_form,
'main_product_color': main_product_color,
}
context.update(context1)
return render(request, "core/product_varient_detail.html", context)
Код шаблона:
{% if colors %}
{% for c in colors %}
{% endfor %}
{% endif %}
{% if linked_colors %}
Linked Product Colors
{% for c in linked_colors %}
{% endfor %}
{% endif %}
The issue I'm facing is that when I click on a specific color, the page only shows that color instead of all available colors for the product variant. How can I modify my code to ensure that all colors are displayed on the product variant detail page, regardless of which color I click on?
Подробнее здесь: https://stackoverflow.com/questions/790 ... o-template
Проблема с отображением всех цветов варианта продукта в шаблоне Django ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Проблема с отображением всех цветов варианта продукта в шаблоне Django
Anonymous » » в форуме Python - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
В чем отличие от параллельного варианта и варианта без ожидания в pyinfra
Anonymous » » в форуме Python - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Фильтрация связанных цветов в администраторе Django на основе выбора продукта
Anonymous » » в форуме Python - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Фильтрация связанных цветов в администраторе Django на основе выбора продукта
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-