Segregowanie produktów po cenie, nazwie, dacie dodania

0

Witam serdecznie.

Pisze sklep internetowy i chcialem zrobic mozliwosc segregowania produktow wzgledem kilku opcji. Moj widok w django wyglada tak:

def produkty(request, page=0, kategoria=0, podkategoria=0, produkt=0):
    page = 'produkty'

    if produkt == 0:
        if kategoria !=0 and podkategoria != 0:
            kat = Kategoria.objects.get(slug=kategoria)
            pod_kat = Podkategoria.objects.get(slug=podkategoria)
            produkty = Produkt.objects.filter(kategoria=kat, podkategoria=pod_kat)
        elif kategoria != 0 and podkategoria == 0:
            kat = Kategoria.objects.get(slug=kategoria)
            produkty = Produkt.objects.filter(kategoria=kat)
        elif kategoria == 0 and podkategoria == 0:
            produkty = Produkt.objects.all()
    else:
        produkt = Produkt.objects.get(slug=produkt)
        zdjecia = ProduktZdjecie.objects.filter(produkt=produkt)
        try:
            zdjecie = ProduktZdjecie.objects.filter(produkt=produkt).first()
        except ObjectDoesNotExist:
            pass
        t = loader.get_template('ext/ext/produkt.html')
        c = locals()
        return HttpResponse(t.render(c, request))

a opcje select w ktorej mozna wybrac sposob segregowania mozna zobaczyc na stronie:

https://markowi.com/produkty/

Jeżeli mógłby mnie ktoś naprowadzić trochę jakby to mozna było ugryźć byłbym bardzo wdzięczny.

0

Wow. Jak na taki początkowy projekt, to wygląda bardzo nieźle.

Tylko pytanko - faktycznie chcesz to pisać samemu od początku? Może mógłbyś skorzystać z gotowych sklepów, jak np Shopper?

1

Zrób w najprostszy możliwy sposób.

Z fronta wysyłaj w ramach sortowania jakąś flagę typu 1-5.

Potem na backendzie robisz sobie mapę:

_sorting_map = {
1: "jedno pole",
2: "drugie pole"
...
}
_sorting_flag =  #tutaj wyciągasz flagę z requestu (url param w przypadku get'a, albo z body w przypadku post'a)
_choosen_sorting = _sorting_map.get(_sorting_flag)
produkty = Produkt.objects.all().order_by(_choosen_sorting).values()

Oczywiście do tego jakaś obsługa błędów itp.

P.S Dodając - do nazwy pola, sprawiasz, że jest interpretowane jako descending. Np -cena przesortuje od największej do najmniejszej.

0
Riddle napisał(a):

Wow. Jak na taki początkowy projekt, to wygląda bardzo nieźle.

Tylko pytanko - faktycznie chcesz to pisać samemu od początku? Może mógłbyś skorzystać z gotowych sklepów, jak np Shopper?

Raz, że chce mieć sklep działający dokładnie tak jak ja chce. Dwa, ze chce sie tez czegos nauczyc piszac go...

ledi12 napisał(a):

Zrób w najprostszy możliwy sposób.

Z fronta wysyłaj w ramach sortowania jakąś flagę typu 1-5.

Potem na backendzie robisz sobie mapę:

_sorting_map = {
1: "jedno pole",
2: "drugie pole"
...
}
_sorting_flag =  #tutaj wyciągasz flagę z requestu (url param w przypadku get'a, albo z body w przypadku post'a)
_choosen_sorting = _sorting_map.get(_sorting_flag)
produkty = Produkt.objects.all().order_by(_choosen_sorting).values()

Oczywiście do tego jakaś obsługa błędów itp.

P.S Dodając - do nazwy pola, sprawiasz, że jest interpretowane jako descending. Np -cena przesortuje od największej do najmniejszej.

dziękuję za pomoc. Tak zrobie

1 użytkowników online, w tym zalogowanych: 0, gości: 1