Как взять данные и показать на странице продукт?
Разрабатываю интернет магазин сайт, не могу показать на странице продукт (у меня product_detail.html) даты которые и меня на с Product_details модели, с других моделей могу отобразить даты, например с моделя Product_image и с Category без проблем беру даты. Вроде все этапы сделал но не могу отобразить даты. Прошу помочь. Внизу мой urls.py:
from django.urls import path
from . import views
from .views import ProductListView
from django.conf.urls.static import static
urlpatterns = [
path('', ProductListView.as_view(), name='amd-home'),
path('product/<int:id>/', views.product_detail, name='product-detail'),
path('about/', views.about, name='amd-about'),
]
Внизу мой models.py:
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=200)
parent_id = models.IntegerField(default=0)
description = models.TextField()
image = models.ImageField(upload_to='uploads/')
def __str__(self):
return f'{self.name}'
class Brand(models.Model):
name = models.CharField(max_length=200)
description = models.CharField(max_length=400)
image = models.ImageField(upload_to='uploads/')
def __str__(self):
return f'{self.name}'
class Product(models.Model):
title = models.CharField(max_length=200)
image = models.ImageField(upload_to='uploads/', blank=True, null=True)
sku = models.CharField(max_length=200)
price = models.IntegerField(default=0)
price_old = models.IntegerField(default=0)
description = models.TextField()
status = models.BooleanField(default=False)
date_posted = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return f'{self.title}, {self.description}'
class Product_image(models.Model):
image = models.ImageField(upload_to='uploads/')
product = models.ForeignKey(Product, on_delete=models.CASCADE)
def __str__(self):
return f'{self.product.title} image'
class Product_details(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
size = models.CharField(max_length=50, blank=True, null=True, default=None)
color = models.CharField(max_length=50, blank=True, null=True, default=None)
video = models.CharField(max_length=200, blank=True, null=True, default=None)
internal_storage = models.CharField(max_length=50, blank=True, null=True, default=None)
ram = models.CharField(max_length=50, blank=True, null=True, default=None)
production_year = models.CharField(max_length=50, blank=True, null=True, default=None)
sim_count = models.CharField(max_length=50, blank=True, null=True, default=None)
sim_type = models.CharField(max_length=50, blank=True, null=True, default=None)
operation_system = models.CharField(max_length=100, blank=True, null=True, default=None)
operation_system_version = models.CharField(max_length=100, blank=True, null=True, default=None)
screen_size = models.CharField(max_length=50, blank=True, null=True, default=None)
resolution = models.CharField(max_length=50, blank=True, null=True, default=None)
back_camera = models.CharField(max_length=50, blank=True, null=True, default=None)
front_camera = models.CharField(max_length=50, blank=True, null=True, default=None)
battery = models.CharField(max_length=50, blank=True, null=True, default=None)
weigth = models.CharField(max_length=50, blank=True, null=True, default=None)
prosessor = models.CharField(max_length=50, blank=True, null=True, default=None)
security = models.CharField(max_length=50, blank=True, null=True, default=None)
guarantee = models.CharField(max_length=50, blank=True, null=True, default=None)
operator_prefix = models.CharField(max_length=50, blank=True, null=True, default=None)
wifi = models.BooleanField(blank=True, null=True, default=None)
allow_3G = models.BooleanField(blank=True, null=True, default=None)
allow_4G = models.BooleanField(blank=True, null=True, default=None)
nfc = models.BooleanField(blank=True, null=True, default=None)
gps = models.BooleanField(blank=True, null=True, default=None)
eye_recognition = models.BooleanField(blank=True, null=True, default=None)
waterproof = models.BooleanField(blank=True, null=True, default=None)
faceID = models.BooleanField(blank=True, null=True, default=None)
shockproof = models.BooleanField(blank=True, null=True, default=None)
def __str__(self):
return f'{self.product.title} details'
Внизу мой views.py:
from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView, DetailView
from django.http import HttpResponse
from .models import Product, Product_image, Product_details
class ProductListView(ListView):
model = Product
template_name = 'product/home.html'
context_object_name = 'products'
ordering = ['-date_posted']
def product_detail(request, id):
product = Product.objects.get(pk=id)
photos = Product_image.objects.filter(product=product)
details = Product_details.objects.filter(product=product)
context = {'product':product,'photos':photos, 'details':details,}
return render(request, 'product/product_detail.html', context)
Внизу мой темплейт файл product_detail.html , очень большой файл поэтому только вставляю суда только тот элемент где обращаюсь к етему моделу. Обратите внимание {{ product.brand.name }} {{ product.title }} нормально видно в экране, но {{ details.ram }} / {{details.internal_storage}} не видны.
<h2>{{ product.brand.name }} {{ product.title }} {{ details.ram }} / {{details.internal_storage}}</h2>
Ответы (1 шт):
Я уже нашел ответ на это вопрос, эту вопрос я написал и на английском языке тоже, отдуда пришол ответ с котором я решил эту проблему. Всем спосибо кто уделил время и почитал мой вопрос.