2011-02-07 86 views
1

我正在與Satchmo framework一起建立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 /產品和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) 

然後,你可以調整你的意見/網址:

# 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分鐘內完成! – 2011-11-11 10:26:21