我正在使用Satchmo框架开发电子商店。 有没有人知道我应该遵循哪些步骤来根据自定义属性(材料类型)过滤产品,以便在页面中显示具有相同种类材料的产品(material.html)? 我应该制作一个material_view函数 我应该覆盖get_absolute_url函数吗?
答案 0 :(得分:1)
如果您想在不触及核心代码的情况下执行此操作,我会在本地应用localsite / product并在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))
答案 1 :(得分: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))