5

製品とその属性にカスタム中間テーブルを使用したいと思います。次のモデルを定義しています。

class Products(models.Model):
    name = models.CharField(max_length=600, blank=True)
    brand = models.CharField(max_length=300, blank=True) 
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)     

class Attributes(models.Model):
    name = models.CharField(max_length=600)
    product = models.ManyToManyField(Products, through="AttributesMapping", related_name="attributes")

class AttributesMapping(models.Model):
    attribute = models.ForeignKey(Attributes)
    product = models.ForeignKey(Products)
    value = models.TextField(blank=True)

ビューで Products オブジェクトをコンテキストに追加し、テンプレートから言って属性を取得しようとしています

{% for attribute in product.attributes.all %}{{ attribute.name }}: {{ attribute.value }} {% endfor %}

名前を取得していますが、値が表示されません。実行されるSQL文を調べてみました。

SELECT `attributes`.`id`, `attributes`.`name` FROM `attributes` INNER JOIN `attributes_mapping` ON (`attributes`.`id` = `attributes_mapping`.`attribute_id`) WHERE `attributes_mapping`.`product_id` = 1

値は「attributes_mapping」テーブルにあります。Select ステートメントには参照がありますが、そのフィールドは選択されていません。

ヘルプや提案をお寄せいただきありがとうございます。

4

2 に答える 2