2016-07-20 9 views
1

こんにちは私はProductモデル、ProductColor、Product Sizeモデルを持っています。私は、製品をサイズと色で適切にリンクしたいと思います。たとえば、私のユーザーがSmall size for A prouct(Tshrit)を選択すると、その小さなサイズで利用可能な色のみが表示されます。Djangoで1つの製品で2つのバリエーションを選択したい

class Product(models.Model): 
    title = models.CharField(max_length=120) 
    description = models.TextField(blank=True, null=True) 
    price = models.DecimalField(decimal_places=2,max_digits=1000) 
    active =models.BooleanField(default=True) 
    weight = models.CharField(max_length=100, null=True, blank=True) 

class ProductColor(models.Model): 
    product = models.ForeignKey(Product) 
    color = models.CharField(max_length=120) 
    active = models.BooleanField(default=True) 

     def __str__(self): 
      return self.color 

     def get_absolute_url(self): 
      return self.product.get_absolute_url() 

製品サイズ

CHOOSE_SIZE = (
('Extra Small', 'XS'), 
('Small', 'S'), 
('Medium', 'M'), 
('Large', 'L'), 
('Extra Large', 'XL'), 
('Double Large', 'XXL'), 
('Triple Large', 'XXXL'), 
) 

サイズを選択するために、製品のバリエーション

class ProductSize(models.Model): 
    product = models.ForeignKey(Product) 
    size = models.CharField(max_length=120, choices=CHOOSE_SIZE) 
    price = models.DecimalField(decimal_places=2, max_digits=20) 
    sale_price = models.DecimalField(decimal_places=2, max_digits=20, null=True, blank=True) 
    active = models.BooleanField(default=True) 

     def __str__(self): 
      return self.size 

     def get_absolute_url(self): 
      return self.product.get_absolute_url() 

製品の詳細HTMLページ

<div class="col-sm-4"> 
    <h3>{{ object.price }}</h3> 
      <!-- <select class="form-control"> 
       {% for vari_obj in object.productsize_set.all %} 
        <option value="{{ vari_obj.id }}">{{ vari_obj }} 
        </option> 
       {% endfor %} 
       </select> --> 
     {% if object.variation_set.count > 1 %} 
      <h5>Size</h5> 
       <select class="form-control"> 
       {% for vari_obj in object.productsize_set.all %} 
        <option value="{{ vari_obj.id }}">{{ vari_obj }} 
        </option> 
       {% endfor %} 
       </select> 
     {% endif %} 
     <br/> 
     <h5>Available Color</h5> 
      <select class="form-control"> 
       {% for color_obj in object.productcolor_set.all %} 
        <option value="{{ color_obj.id }}">{{ color_obj }} 
        </option> 
       {% endfor %} 
      </select> 
    <a href="#">Add to cart</a> 
    <br/> 
    <hr/> 
</div><!--end of col-sm-4!--> 

は、私が持っているので、現在の状況に問題があるサンキュー製品サイズがリンクされていない私は赤シャツラージ、赤シャツSmallとBlueのカラーシャツミディアムを同じ製品に追加すると、適切に色を塗ります。 avaialbleカラーサイズのための私のプロダクトdetialページDropdwonに従ってくださいです:赤は、赤、青

+0

何をお探しですか?何を試しましたか?あなたは何を期待しましたか? – Gaetan

+0

私は衣料品店のウェブサイトを作っていますが、商品のサイズと色を選択するオプションがあり、商品のサイズに使用可能な色のみを表示したいと考えています。 私は上記の方法を試して、Ididnotはサイズとカラーモ​​デルの間にリンクがないことを知っているので、何も期待していません。私の製品モデルは色とサイズのリンクです。 この2つのモデル(ProductCOlorとProductSize)をリンクする方法を知りたい。 –

+0

あなたの製品が1つのサイズと1つの色だけである場合、OneToOneFieldを使用して3つのモデルをリンクすることができます。 – Gaetan

答えて

1

は、あなただけの製品を挿入し、テーブルにすべてのデータを挿入している今、この

class ProductSizeColor(models.Model): 
    product = models.ForeignKey(Product) 
    color = models.ForeignKey(ProductColor) 
    size = models.ForeignKey(ProductSize) 

ようProductSizeColorという名前の新しいモデルを作成し、色とサイズをProductSizeColorモデルに変換します。 XLサイズトムシャツの全色が必要な場合は、このような検索を

ProductSizeColor.objects.filter(
    product=tom_t_shirt_object, 
    size=XL_size_object_for_tom_t_shirt 
) 
+0

Nopは動作しません。一般的な考え方は、ProductSizeごとに「ProductColor」を持つことです。したがって、ProductColorがデータベースに存在する場合は表示できます。私は多面的な関係に多くを必要とするかもしれないと思う、私はDjangoに直面し、問題に直面している。とにかく助けてくれてありがとう –

関連する問題