2011-02-07 189 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