【问题标题】:Django: Product attributes and custom fields form in product pageDjango:产品页面中的产品属性和自定义字段形式
【发布时间】:2014-08-16 13:30:19
【问题描述】:

我刚开始学习 Django,我想创建一个带有属性、自定义字段和自定义字段选项的产品模型。自定义字段选项示例:
第 1 行:[您的文字] |自定义字段选项:[FONT] [FONT SIZE] [...]
第 2 行:[您的文字] |自定义字段选项:[FONT] [FONT SIZE] [...]

所以我创建了这个模型:

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

但现在我不知道如何在产品详细信息页面中创建表单,用户可以在其中选择产品属性(颜色、尺寸...)和产品自定义字段(和自定义字段选项)。我尝试了很多东西,但没有结果。

你能帮帮我吗? :)

【问题讨论】:

    标签: python django django-models django-forms django-views


    【解决方案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 中 从 django 导入表格 从 .models 导入产品、产品属性

    class ProductForm(forms.ModelForm):
    
        class Meta:
            model = Product
    
    
    class ProdductAttributesForm(forms.ModelForm):
    
        class Meta:
            model = ProductAttributes
    

    相应地编写您的views.py、urls.py 和模板 这种方法会给你一个文本框来输入产品和选择颜色的下拉菜单。 希望对您有所帮助!

    【讨论】:

    • 谢谢,但这不是我想要的。我想要这样的东西:class ProductForm(ModelForm): class Meta: model = Product fields = ['attributes'] 但是“属性”仅在 ProductAttribute 模型中由“related_name”属性定义,所以它不起作用。
    • 为什么不呈现两个单独的表单,您可以使用一些 ajax 或 javascript 来获取您的“产品”详细信息,然后是“产品属性”
    • 我认为 Django 有一个功能可以做我想做的事。但是是的,我可以使用多种形式。
    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多