Фильтр товаров по атрибуту - PullRequest
1 голос
/ 07 февраля 2011

Я работаю в интернет-магазине с фреймворком Satchmo. Кто-нибудь знает, какие шаги я должен выполнить, чтобы отфильтровать продукты в соответствии с пользовательским атрибутом (тип материала), чтобы представить продукты, которые имеют такой же материал на странице (material.html)? Должен ли я сделать функцию material_view Должен ли я переопределить функцию get_absolute_url?

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Если вы хотите сделать это, не касаясь основного кода, я бы сделал локальное приложение для локального сайта / продукта и в 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 голосов
/ 14 марта 2011

Когда вы говорите «пользовательский атрибут», вы имеете в виду, что вы изменили код 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))
...