首页 > 解决方案 > 如何在 Django 中创建具有尺寸和颜色的产品变体(带有多个图像)?

问题描述

我的问题是,如何为尺寸和颜色创建产品的产品变体,并且该产品的每个颜色变体都有多个图像?就像亚马逊的做法一样。

我的管理员.py

from django.contrib import admin
from .models import Product, Images

class ProductImageInline(admin.TabularInline):
    model = Images
    extra = 7

class ProductAdmin(admin.ModelAdmin):
    list_display = ['image_tag', 'title', 'category']
    list_filter  = ['category']
    readonly_fields = ('image_tag',)
    inlines     = [ProductImageInline]
    #prepopulated_fields = {'slug': ('title',)}

admin.site.register(Product, ProductAdmin)
admin.site.register(Images)

我的模型.py

from ckeditor_uploader.fields import RichTextUploadingField
from django.db import models
from django.urls import reverse
from django.utils.safestring import mark_safe

class Product(models.Model):
    brand           = models.CharField(max_length=50)
    title           = models.CharField(max_length=120)
    keywords        = models.CharField(max_length=120)  
    description     = models.TextField()
    image           = models.ImageField(upload_to='images/', null=False)
    mrp             = models.DecimalField(decimal_places=2, max_digits=10)
    price           = models.DecimalField(decimal_places=2, max_digits=10)
    detail          = RichTextUploadingField()
    slug            = models.SlugField(blank=True, unique=True)
    created_at      = models.DateTimeField(auto_now_add=True)
    update_at       = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    def image_tag(self):
    if self.image.url is not None:  
        return mark_safe('<img src="{}" height="50"/>'.format(self.image.url))
    else:
        return ""   

    image_tag.short_description = 'Image'

class Images(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    title   = models.CharField(max_length=50, blank=True)
    image   = models.ImageField(blank=True, upload_to='images/')

    def __str__(self):
        return self.title

我的意见.py

from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
from .models import Product, Images

def product_detail(request, id, slug):
    product = Product.objects.get(pk=id)
    images = Images.objects.filter(product_id=id)
    context = {
        'product': product,
        'images': images,
        }
    return render(request, "product_detail.html", context)

标签: pythondjango

解决方案


推荐阅读