🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27817

Re: Django i pole manytomany w template

#27817
From: Łukasz Rekucki
Date: Fri, 26 Nov 2010 11:02
66 lines
3572 bytes
On Nov 26, 10:25 am, konryd <kon...@gmail.com> wrote:
> On 25 Lis, 11:26, Łukasz Rekucki <lreku...@gmail.com> wrote:
>
>
>
>
>
>
>
>
>
> > On Nov 25, 12:04 am, ds <ad...@email.pl> wrote:
>
> > > ds wrote:
> > > > Czy jest jakaś możliwość żeby sprawdzić w szablonie czy dane pole
> > > > onetomany lub manytomany zawiera określony element?
>
> > > > Załóżmy że mam obiekt "garaz" a wnim pole "model auta" (jeden do wielu) -
> > > > głupi przykład ale obrazujący to co chcę osiągnąć. Chcę wylistować
> > > > wszystkie garaże a przy tym który ma w sobie "fiata" napisać że jest. Do
> > > > szablonu przekazuję garaże.
>
> > > Zrobiłem połowicznie i nieładnie jakoś mi się nie chce wierzyć że nie ma
> > > rozwiązania:
>
> > > {% for auto in garaz.auta.all %}
> > >         {% if auto.id == moje.id %}
> > >                 JEST
> > >         {% endif %}
> > > {% endfor %}
>
> > > Tylko są dwa problemy:
>
> > > 1. nie podoba mi się takie pętlenie. Przy np. 1000 garaży gdzie każdy ma po
> > > kilkadziesiąt modeli tych pętli będzie bez liku
>
> > > 2. nie wiem jak to rozwiązać gdy będę chciał wyświetlać JEST/NIE MA
>
> > Ładnym rozwiązaniem, jest nie robienie tego w szablonie. Szablony
> > Django nie powinny zawierać logiki.
>
> >   # views.py
>
> >   render_to_response("cars.html", {"garages_with_modelX":
> > Garage.objects.filter(model_auta=fiat.pk)
>
> >   # cars.html
>
> >   Model fiat znajduje się w:
>
> >   {% for garage in garages_with_modelX %} {{ garage.address }} {%
> > endfor %}
>
> Zwróć uwagę że to jest inny use case. OP nie chce wyświetlić tylko te
> z autem, ale wszystkie a przy tych z autem zaznaczyć że jest (popatrz
> na pierwszego maila).

Dlatego nie odpowiadałem na pierwszego maila, tylko na podany kod.
Zresztą nie widzę co zmienia to w fakcie, że nie powinno się
takich rzeczy robić w szablonie. Z przynajmniej kilku sposobów,
najmniej skomplikowany, który nie robi tysiąca bezsensownych zapytań:

    cars_with_fiat = set(fiat.garage_set.values_list('pk', flat=True))
    garages = Garage.objects.all()
    for g in garages:
        g.has_fiat = (g.pk in cars_with_fiat)
Technical Details
Message-ID: <6ce857cb-ac65-430d-ad18-a383124d8826@n10g2000yqd.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!n10g2000yqd.googlegroups.com!not-for-mail
References: <ick2ui$8gu$1@news.onet.pl> <ick5m2$gv4$1@news.onet.pl> <98c04af0-787c-44f0-b7a1-2e7f8753c0c5@s4g2000yql.googlegroups.com> <a42dbb14-e8bd-4076-8cf2-e73cc6108b51@w21g2000vby.googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!n10g2000yqd.googlegroups.com!not-for-mail
From: Łukasz Rekucki <lrekucki@gmail.com>
Newsgroups: pl.comp.lang.python
Subject: Re: Django i pole manytomany w template
Date: Fri, 26 Nov 2010 03:02:04 -0800 (PST)
Organization: http://groups.google.com
Lines: 74
Message-ID: <6ce857cb-ac65-430d-ad18-a383124d8826@n10g2000yqd.googlegroups.com>
References: <ick2ui$8gu$1@news.onet.pl> <ick5m2$gv4$1@news.onet.pl> <98c04af0-787c-44f0-b7a1-2e7f8753c0c5@s4g2000yql.googlegroups.com> <a42dbb14-e8bd-4076-8cf2-e73cc6108b51@w21g2000vby.googlegroups.com>
NNTP-Posting-Host: 212.76.62.207
Mime-Version: 1.0
X-Trace: posting.google.com 1290769324 32150 127.0.0.1 (26 Nov 2010 11:02:04 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Fri, 26 Nov 2010 11:02:04 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: n10g2000yqd.googlegroups.com; posting-host=212.76.62.207; posting-account=5fpXZwoAAADF-CUdCuJ-FpYxG8__-wRx
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.587.0 Safari/534.12,gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit