python - 获取产品属性及其值
问题描述
产品和产品属性表的设计方式如下
class Attribute(models.Model):
name = models.CharField(max_length=30, unique=True)
slug = models.SlugField(max_length=250, unique=True)
class Meta:
verbose_name = "Attribute"
verbose_name_plural = "Attributes"
def __str__(self):
return self.name
class AttributeValue(models.Model):
name = models.CharField(max_length=250)
value = models.CharField(max_length=100, blank=True, default="")
slug = models.SlugField(max_length=255)
attribute = models.ForeignKey(
Attribute, related_name="values", on_delete=models.CASCADE
)
class Meta:
ordering = ("sort_order", "id")
unique_together = ("slug", "attribute")
def __str__(self) -> str:
return self.name
def get_ordering_queryset(self):
return self.attribute.values.all()
class ProductAttribute(models.Model):
product = models.ForeignKey(Product, related_name="attribute_product", on_delete=models.CASCADE, null=True)
attribute = models.ForeignKey(
AttributeValue, related_name="attribute_value_product", on_delete=models.CASCADE
)
class Meta:
ordering = ("sort_order",)
verbose_name = "Product Attribute"
verbose_name_plural = "Product Attributes"
def __str__(self):
return f'{self.product.name} - {self.attribute.name}'
def get_ordering_queryset(self):
return self.product.attribute_product.all()
class ProductTypeAttributeValue(models.Model):
product_type = models.ForeignKey(ProductType, on_delete=models.CASCADE)
attribute_value = models.ForeignKey(AttributeValue, on_delete=models.CASCADE)
def __str__(self):
return f'{self.product_type.name} - {self.attribute_value.value}'
我可以通过以下方式获取特定产品的属性列表
attribute = models.ProductAttribute.objects.filter(product=product)
我可以获得属性值和属性名称的值
for a in attribute:
print(a.attribute.name, a.attribute.attribute.name)
这会给我
Small Size
Medium Size
但我不知道如何通过以下方式返回
attribute [
{
name: color,
slug: color
values [
{
id: 1,
name: R,
value: Red
},
{
id: 2,
name: G,
value: Green
}
]
}
]
解决方案
class ProductAttribute(models.Model): product = models.ForeignKey( Product from where this Product model来自哪里?
推荐阅读
- discord.js - 在 discord.js 中制作欢迎信息
- javascript - 将 useMemo 或 useCallbacks 添加到地图组件会破坏代码并显示错误“渲染的钩子比上一次渲染期间更多”
- javascript - 我的
不加载我的 js 文件并且我的浏览器无法加载它 - javascript - 在 JSON.stringify(obj) 之后反应 js 不同的值
- elasticsearch - Elasticsearch 操作现有字段值以添加新字段
- node.js - 重新连接到 EventStore 中的持久连接后不重复确认的事件
- python - PHP 不执行 Python 文件
- java - 以平滑的外观更改 JButton 文本和背景颜色
- python - 在 1 个项目中运行 2 个 Discord 机器人 (Discord.py)
- c# - C# Modbus:ReadHoldingRegisters 在返回输出中不一致