@PyCi

Как объединить продукты?

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

Как объединить все продукты разных классов в одну переменную или как с ними работать?

Просто пример про что идет речь.
class Product(models.Model):
    product_name = models.CharField(max_length=50)
    slug = models.SlugField(max_length=50)
    
    class Meta:
    abstract = True
    
class Phone(Product):
    parameters = models.CharField(max_length=200)
    
class Book(Product):
    parameters = models.CharField(max_length=200)  
    
class Scooter(Product):
    parameters = models.CharField(max_length=200)  
    
class BoardGames(Product):
    parameters = models.CharField(max_length=200)


Передаю продукт
def home(request):
    phones = Phone.objects.all().filter(is_available=True)
    books = Book.objects.all().filter(is_available=True)
    scooters = Scooter.objects.all().filter(is_available=True)
    board_games = BoardGame.objects.all().filter(is_available=True)

    context = {
        'phones': phones,
        'books': books,
        'scooters': scooters,
        'board_games': board_games,
    }

    return render(request, 'home/home.html', context)


Много блоков в html

{% for phone in phones %}
		<div class="col-md-3">
			<div class="card card-product-grid">
				<a href="{% url 'phone_detail' phone.id %}" class="img-wrap"> <img
						src="{{phone.image.url}}">
				</a>
				<figcaption class="info-wrap">
					<a href="#" class="title">{{phone.product_name}}</a>
					<div class="price mt-1">${{phone.price}}</div> <!-- price-wrap.// -->
				</figcaption>
			</div>
		</div> <!-- col.// -->
		{% endfor %}

		{% for book in books %}
		<div class="col-md-3">
			<div class="card card-product-grid">
				<a href="{% url 'book_detail' book.id %}" class="img-wrap"> <img src="{{book.image.url}}">
				</a>
				<figcaption class="info-wrap">
					<a href="" class="title">{{book.product_name}}</a>
					<div class="price mt-1">${{book.price}}</div> <!-- price-wrap.// -->
				</figcaption>
			</div>
		</div> <!-- col.// -->
		{% endfor %}

		{% for scooter in scooters %}
		<div class="col-md-3">
			<div class="card card-product-grid">
				<a href="{% url 'scooter_detail' scooter.id %}" class="img-wrap"> <img
						src="{{scooter.image.url}}">
				</a>
				<figcaption class="info-wrap">
					<a href="" class="title">{{scooter.product_name}}</a>
					<div class="price mt-1">${{scooter.price}}</div> <!-- price-wrap.// -->
				</figcaption>
			</div>
		</div> <!-- col.// -->
		{% endfor %}

		{% for b_g in board_games %}
		<div class="col-md-3">
			<div class="card card-product-grid">
				<a href="{% url 'board_game_detail' b_g.id %}" class="img-wrap"> <img
						src="{{b_g.image.url}}">
				</a>
				<figcaption class="info-wrap">
					<a href="" class="title">{{b_g.product_name}}</a>
					<div class="price mt-1">${{b_g.price}}</div> <!-- price-wrap.// -->
				</figcaption>
			</div>
		</div> <!-- col.// -->
		{% endfor %}
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
mohovoy
@mohovoy
Что-то там программирую, кто бы знал что именно?
Комментировать
@forkhammer
Fullstack-разработчик (Django, Angular)
Наследовать модель товаров имеет место, если разные товары отличаются набором полей или поведением. Я сомневаюсь что модели Book и Phone будут отличаться - это просто физический товар, у которого есть название, артикул, цена, количество на складе и тд. В этом случае товары надо разбивать не на модели, а на категории - сделать модель Category и у продукта поле category = ForeignKey(Category)

Если ты захочешь положить в каталог очень разные товары - физический товар, электронные товары с подпиской, подарочные сертификаты и т.д., то в этом случае может помочь наследование моделей. Но не в том виде как у тебя. Чтобы все работало как надо поможет django-polymorphic https://django-polymorphic.readthedocs.io/en/stable/ Он сделает тебе правильное наследование в общем каталоге продуктов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы