以表格形式加载动态模型属性-Django

戈兰

因此,我正在构建一个广告应用程序。基本上,用户登录后,他们可以发布有关某事的广告。我在下面发布了模型,但基本上我有一个类别(例如,电子产品或房地产),然后是一个子类别(电子产品->笔记本电脑或房地产->房屋,公寓等)。问题是,不同的物品具有不同的属性。例如,一台笔记本电脑可能具有“屏幕”,“ ram”和“ hdd”属性,而“汽车”可能具有“里程”和“状况”。我决定将这些属性存储在JSONField中。

from django.db import models
from django.contrib.postgres.fields import JSONField

class Category(models.Model):
    name = models.CharField(max_length=255)

def __str__(self):
    return self.name

class SubCategory(models.Model):
    category = models.ForeignKey('Category')
    name = models.CharField(max_length=255)

def __str__(self):
    return self.name


class Product(models.Model):
    name = models.CharField(max_length=255)
    subcategory = models.ForeignKey('SubCategory')
    description = models.TextField()
    price = models.IntegerField()
    price_fixed = models.BooleanField(default=False)
    monthly_payments = models.BooleanField(default=False)
    created = models.DateField(auto_now_add=True)
    custom_attributes = JSONField(default=dict)


def __str__(self):
    return self.name

现在,如何处理表单和视图中的这些自定义属性?我需要这样做,以便当用户从下拉列表中选择类别/子类别时,这些属性需要显示为文本字段,并且用户将输入屏幕尺寸,T恤尺寸或颜色等。

这是我的第一个django应用程序,我从中学到的书没有涵盖这样的内容,而且我不确定要从这里走到哪里,在google / SO上搜索并没有找到解决方案。

拉多斯瓦夫·甘恰雷克

JSONFields适用于Python不会经常自省的结构化元数据。

在您的情况下,我建议创建另一个用于字段配置的表,将此表链接到类别,并为产品中的值提供一个表。以简化形式:

class CategoryAtrribute(models.Model):
    name = models.CharField()
    value_type = models.CharField()


class Category(models.Model):
    attributes = models.ManyToManyField(CategoryAtrribute)


class AttributeValues(models.Model):
    category = models.ForeignKey('Category')
    attribute = models.ForeignKey('CategoryAtrribute')
    value = models.TextField()


class Product(models.Model):
    attribute_values = models.ManyToManyField(CategoryAtrribute, through=AttributeValues)

这里的问题基本上有两个:1.您需要确保产品仅具有其类别所允许的属性2.检查字段类型的功能需要进行硬编码

此解决方案的简化版本是使用所有类别的所有可能字段创建表元数据。该模型将具有带产品的one2one,类别将具有从中使用的字段列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以表格形式加载动态模型属性-Django

来自分类Dev

Django动态访问模型属性

来自分类Dev

如何使用Django中的数据库以表格形式动态加载ChoiceField的字段?

来自分类Dev

django模型搜寻表格

来自分类Dev

使Django模型表格安全

来自分类Dev

Django DetailView动态模型

来自分类Dev

Django DetailView动态模型

来自分类Dev

Django - 加载动态模板

来自分类Dev

Django测试模型属性

来自分类Dev

Django测试模型属性

来自分类Dev

遍历Django模型属性

来自分类Dev

Django模型属性

来自分类Dev

在Django中将模型导入表格

来自分类Dev

在Django中将模型导入表格

来自分类Dev

django / javascript动态填充表格

来自分类Dev

模型形式的Django auto slug

来自分类Dev

以Django选择的形式在``模型选择''字段中列出各种模型属性

来自分类Dev

Django模型ForeignKey unique = True不以表格形式显示的最佳做法是什么?

来自分类Dev

Django中的动态模型字段

来自分类Dev

动态长度Django模型字段

来自分类Dev

在Django中从模型加载对象

来自分类Dev

django过滤查询集会导致“ AppRegistryNotReady:模型尚未加载”。与models.py中的表格

来自分类Dev

Django模型中的派生属性

来自分类Dev

Django模型中的属性数

来自分类Dev

Django视图/模型属性错误

来自分类Dev

Django 找不到模型属性

来自分类Dev

django表单动态属性查找

来自分类Dev

Django仅以表格形式提交csrf令牌?

来自分类Dev

django CBV:以表格形式获取当前用户