2011-02-07 7 views
1

私はSatchmoフレームワークを持つeshopで作業しています。 ページ(material.html)に同じ種類の品目を持つ製品を表示するために、カスタム属性(品目タイプ)に従って製品をフィルタ処理するためにどの手順を実行する必要があるかを知っていますか? material_view関数を作成する必要があります get_absolute_url関数をオーバーライドする必要がありますか?アトリビュート別にフィルタを適用する

答えて

0

「カスタム属性」と言うと、別のフィールドを追加するコードproduct.models.Productを変更したことを意味しますか?

このような場合は、カスタム表示を作成することをお勧めします。

あなたのプロダクトコードが何かのような...

class Product(models.Model): 
    ... 
    matieral_type = models.CharField(max_length=128) 
    ... 

ある場合...あなたは、このようなビューを構築することができます...

def material(request,material_type): 
    prods = Product.objects.filter(material_type=material_type) 
    return render_to_response('material.html',{'products',prods},RequestContext(request)) 
1

あなたは触れずにこれをしたい場合コアコード、私は地元のアプリケーションのlocalsite/productsとmodels.pyを作成します:

class Material(models.Model): 
    product = models.ManyToManyField(Product, blank=True, null=True) 
    name = models.CharField(_("Name"), max_length=30) 
    slug = models.SlugField(_("Slug"), help_text=_("Used for URLs, auto-generated from name if blank"), blank=True, unique=True) 
    description = models.TextField(_("Description"), blank=True, help_text="Optional") 

この新しいアプリケーションを管理者に追加し、さらに製品ページからそれらを利用できるようにする、インラインとしてそれらを追加します。

# if you have lots of products, use the nice horizontal filter from django's admin 
class MaterialAdmin(admin.ModelAdmin): 
    filter_horizontal = ('product',) 

class Material_Inline(admin.TabularInline): 
    model = Material.product.through 
    extra = 1 

admin.site.register(Material, MaterialAdmin) 

# Add material to the inlines (needs: from product.admin import Product, ProductOptions) 
ProductOptions.inlines.append(Material_Inline) 
admin.site.unregister(Product) 
admin.site.register(Product, ProductOptions) 

を次に、あなたの意見/ URLを適応させることができます:私はあなたを愛して

# urls.py 
url(r'^material-list/([\w-]+)/$', material_list, {}, name="material_list"), 

# view.py 
def material_list(request, slug): 
    products = Product.objects.filter(material__slug='slug') 
    return render_to_response('localsite/material/list.html', {'products':products}, context_instance=RequestContext(request)) 
+0

andzepを。私はsatchmoカスタマイズの狂気に行っていたが、この答えは30分でそれを作った! –

+0

これはあなたにとって嬉しかったです。はい、私の最初のプロジェクトであるsatchmoの後で、99.99%のケースで、コアに触れることなく、素敵で小さなソリューションを見つけることができました。しかし、この問題は、主に「どのようにして?」ということを見つけることにあります。 – andzep

関連する問題