2016-06-23 13 views
-1

私は別のWebサイトから製品を取得しているアグリゲーターアプリケーションに取り組んでいます。各製品には、サブカテゴリ、カラー、パタンが関連付けられています。 (例えば、長袖の青い横縞のTシャツ。)ここでは、サブカテゴリは長袖のTシャツと青と柄のストライプです。私は、問題は、私はその色と下のパターン下のサブカテゴリを表示するために必要なフロントエンドのサイドバーにあるすべてのものは大丈夫です。このティルこのDjangoモデルの関係

from __future__ import unicode_literals 

from django.db import models 
from smart_selects.db_fields import ChainedForeignKey,ChainedManyToManyField 

# Create your models here. 
class Category(models.Model): 
    title=models.CharField(max_length=255) 

    def __str__(self): 
     return self.title 


class Product(models.Model): 
    title=models.CharField(max_length=255) 
    price=models.DecimalField(max_digits=10,decimal_places=4,null=True) 
    subcategory = models.ForeignKey('Subcategory',related_name='products',null=True,blank=True) 
    color = models.ForeignKey('Color',related_name='productcolor',null=True) 
    pattern = models.ForeignKey('Pattern',related_name='productpattern',null=True) 
    image= models.URLField(null=True,blank=True) 
    # outfit= models.ForeignKey('Outfit',related_name='looks',null=True) 


    def __str__(self): 
     return self.title 


class Subcategory(models.Model): 
    title=models.CharField(max_length=255) 
    category = models.ForeignKey('Category',related_name='category',blank=True,null=True) 
    # product= models.ForeignKey('Product',related_name='Productinsub',null=True) 
    # outfit= models.ForeignKey('Outfit',related_name='outlook',null=True) 

    class Meta: 
     verbose_name_plural = "subcatagories" 


    def __str__(self): 
     return self.title 

class Color(models.Model): 
    title=models.CharField(max_length=255) 
    subcategory = models.ManyToManyField('Subcategory',related_name='subcategory',null=True) 
    # pattern = models.ForeignKey('Pattern', blank=True, null=True, related_name='colors') 


    def __str__(self): 
     return self.title 

class Pattern(models.Model): 
    title=models.CharField(max_length=255) 
    # color = models.ManyToManyField('Color',related_name='patterns',null=True) 
# 
    def __str__(self): 
     return self.title 

のようなモデルを作成しました。ユーザーがサイドバーから長袖Tシャツなどのサブカテゴリを選択すると、カラーサイドバーで、その特定のサブカテゴリの使用可能な色をすべて表示し、同じパターンにする必要があります。では、サブカテゴリと色の直接関係はないので、どのようにしてサブカテゴリからすべての色を取得できますか?

EDIT 示唆されているように私は私の完全なモデルを追加している私は関係が追加されましたが、私は私のcsvファイルをアップロードするときには、ここで多くの分野に多くのマッピングされていない私はジャンゴから私のcsvファイルをマッピングする方法である

class CategoryAdmin(admin.ModelAdmin): 
    pass 


admin.site.register(Category,CategoryAdmin) 

# class LookAdmin(admin.ModelAdmin): 
# pass 
# 
# 
# admin.site.register(Look,LookAdmin) 


@admin.register(models.Subcategory) 
class SubcategoryAdmin(bulk_admin.BulkModelAdmin): 
    search_fields = ('title',) 
    raw_id_fields = ('category',) 

# admin.site.register(Subcategory,SubcategoryAdmin) 


class ColorAdmin(admin.ModelAdmin): 
    pass 

admin.site.register(Color,ColorAdmin) 

class ProductWidget(widgets.ForeignKeyWidget): 

    def clean(self, value): 
     return self.model.objects.get_or_create(title= value)[0] 


class ProductResource(resources.ModelResource): 

    category = fields.Field(column_name='category', attribute='category', widget=ProductWidget(Category, 'title')) 
    subcategory = fields.Field(column_name='subcategory', attribute='subcategory', widget=ProductWidget(Subcategory, 'title')) 
    color = fields.Field(column_name='color', attribute='color', widget=ProductWidget(Color, 'title')) 
    pattern = fields.Field(column_name='pattern', attribute='pattern', widget=ProductWidget(Pattern, 'title')) 


    class Meta: 
     model = Product 

class ProductAdmin(ImportExportModelAdmin,bulk_admin.BulkModelAdmin): 
    resource_class = ProductResource 
    list_filter = ('subcategory', admin.RelatedOnlyFieldListFilter),('color', admin.RelatedOnlyFieldListFilter),('pattern', admin.RelatedOnlyFieldListFilter) 
    list_select_related = ('subcategory','color','pattern') 
    # raw_id_fields = ('outfit',) 
    # bulk_inline = (ProductInline,) 

    # inlines = (OutfitInline,) 

admin.site.register(Product,ProductAdmin) 
をエクスポート-import

私のcsvファイルは、私はあなたが定義したrelated_nameを使用するカラーモデルへのサブカテゴリからアクセスするには、この

title  price category subcategory color id 
Stripe Top 899 Top Dress red 
Fringe Shoulder Midi Dress 3495 Top Dress red 
Button Through Skater Dress 1595 Top Dress red 
+0

モデルを表示する方が簡単です。 –

+0

@JoseRomeroiがモデルを追加しました –

答えて

0

のように見えます。あなたは

#And for avoiding repeated colors 
return list(set(list_of_colors)) 

のようにこれを行うことができれば

list_of_colors = [] 
for product in subcategory.products.all(): 
    list_of_colors.append(product.color) 

#And for avoiding repeated colors 
list_of_colors = set(list_of_colors) 
list_of_colors = list(list_of_colors) 
return list_of_colors 

わからない私は、私は問題を正しく理解したいと考えています。これが最善の方法であるかどうかは分かりません...しかし、私はそれが助けてくれることを願っています。

+0

サブカテゴリ 'products = subcategory.products_set'を持つすべての製品を設定して、それらの製品から色を取得しようとしましたか? – user2466766

+0

@ user2466766あなたは少し精巧にすることができます私はまだ非常に初心者のdjangoです –

0

以下では、ユーザーがサブカテゴリを選択したとしているので、subcategory.idをビューに渡していると仮定します。

views.py: 
def YourView(request, subcategory_id) 
    subcategory = Subcategory.objects.get(id=subcategory_id) 
    products = subcategory.products_set.all() 
    context = {'products': products} 
    template = 'YourTemplate.html' 
    return render(request, context, template) 


html: 
<div class="btn-group"> 
    <button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 
     Colors 
    </button> 
    <div class="dropdown-menu" aria-labelledby="dropdownMenu1"> 
     <ul class="list-group"> 
     {% for c in products %} 
      <button class="list-group-item" type="submit" value="{{ c.color }}" name="some_name">{{ c.color }}</button> 
     {% endfor %} 
     </ul> 
    </div> 
</div> 

ユーザーが色を選択しなければならないと仮定して、ボタンのドロップダウンメニューに色を配置しました。これがあなたが探しているものであることを願っています。