Django:产品页面的属性和自定义字段表单

0 投票
1 回答
2576 浏览
提问于 2025-04-18 17:29

我刚开始学习Django,想要创建一个产品模型,这个模型里有一些属性、自定义字段和自定义字段选项。自定义字段选项的例子是:
第一行: [你的文本] | 自定义字段选项: [字体] [字体大小] [...]
第二行: [你的文本] | 自定义字段选项: [字体] [字体大小] [...]

所以我创建了这样的模型:

from django.db import models
from django.utils import timezone

class Product(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    sku = models.CharField(max_length=100)
    slug = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    active = models.BooleanField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __unicode__(self):
        return self.name

class ProductMeta(models.Model):
    product = models.OneToOneField('Product')
    title = models.CharField(max_length=100)
    description = models.TextField(max_length=250)

class ProductImage(models.Model):
    def upload_path(self, filename):
        return 'static/uploads/images/%s%s' % (timezone.now().strftime('%Y/%m/%d/%Y%m%d_'), filename)
    product = models.ForeignKey('Product')
    name = models.CharField(max_length=100)
    default = models.BooleanField()
    image = models.ImageField(upload_to=upload_path)
    def __unicode__(self):
        return self.name

class ProductCharacteristic(models.Model):
    product = models.ForeignKey('Product', related_name="characteristics")
    name = models.CharField(max_length=100)
    value = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class ProductAttribute(models.Model):
    category = models.ForeignKey('ProductAttributeCategory')
    products = models.ManyToManyField('Product', related_name="attributes")
    name = models.CharField(max_length=100)
    ordering = ['-category']
    def __unicode__(self):
        return u'%s : %s' % (self.category, self.name)

class ProductAttributeCategory(models.Model):
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class ProductAttributeValue(models.Model):
    attribute = models.ForeignKey('ProductAttribute', related_name="values")
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class ProductCustomField(models.Model):
    product = models.ForeignKey('Product', related_name="custom_fields")
    name = models.CharField(max_length=100)
    description = models.TextField(max_length=250)
    def __unicode__(self):
        return self.name

class ProductCustomFieldOption(models.Model):
    fields = models.ManyToManyField('ProductCustomField', related_name="options")
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class ProductCustomFieldOptionValue(models.Model):
    option = models.ForeignKey('ProductCustomFieldOption', related_name="values")
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

但是现在我不知道怎么在产品详情页面创建一个表单,让用户可以选择产品的属性(比如颜色、尺寸等)和产品的自定义字段(以及自定义字段选项)。我尝试了很多方法,但都没有成功。

你能帮我一下吗? :)

1 个回答

1

你的问题让我有点困惑,不过我会尽量帮你理解。你可以看看下面的内容,看看是否对你有帮助。

在你的 models.py 文件里

from django.db import models
from model_utils import Choices

colour_choices = ('Blue', 'Green')


class Product(models.Model):
    name = models.CharField(max_length=100)

    def __unicode__(self):
        reuturn self.name


class ProductAttributes(models.Model):
    product = models.Foreignkey(Product, related_name='products')
    colour = models.CharField(choices=Choices(*colour_choices))

在你的 forms.py 文件里 from django import forms from .models import Product, ProductAttributes

class ProductForm(forms.ModelForm):

    class Meta:
        model = Product


class ProdductAttributesForm(forms.ModelForm):

    class Meta:
        model = ProductAttributes

接着,你需要相应地编写 views.py、urls.py 和模板。这样做会给你一个文本框,让你可以输入产品信息,还有一个下拉菜单让你选择颜色。希望这些对你有帮助!

撰写回答