Thread View: pl.comp.lang.python
8 messages
8 total messages
Started by ds
Wed, 24 Nov 2010 22:17
Django i pole manytomany w template
Author: ds
Date: Wed, 24 Nov 2010 22:17
Date: Wed, 24 Nov 2010 22:17
11 lines
1110 bytes
1110 bytes
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. -- Pozdrawiam ds
Re: Django i pole manytomany w template
Author: ds
Date: Wed, 24 Nov 2010 23:04
Date: Wed, 24 Nov 2010 23:04
30 lines
1655 bytes
1655 bytes
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
--
Pozdrawiam
ds
Re: Django i pole manytomany w template
Author: ds
Date: Thu, 25 Nov 2010 08:49
Date: Thu, 25 Nov 2010 08:49
13 lines
1065 bytes
1065 bytes
konryd wrote: > http://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#in- operator > Kurcze przeglądałem tą dokumentację, dlaczego tego nie widziałem? Dzięki. -- Pozdrawiam ds
Re: Django i pole manytomany w template
Author: konryd
Date: Thu, 25 Nov 2010 09:30
Date: Thu, 25 Nov 2010 09:30
37 lines
2475 bytes
2475 bytes
On 25 Lis, 00:04, 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
>
> --
> Pozdrawiam
> ds
http://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#in-operator
Możliwe że będzie stosować ten sam nieefektywny algorytm, ale nie
powinieneś się tym przejmować dopóki Cię nie walnie.
pozdrawiam,
Konrad
Re: Django i pole manytomany w template
Author: Łukasz Rekucki
Date: Thu, 25 Nov 2010 10:26
Date: Thu, 25 Nov 2010 10:26
41 lines
2522 bytes
2522 bytes
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 %}
Re: Django i pole manytomany w template
Author: konryd
Date: Fri, 26 Nov 2010 09:25
Date: Fri, 26 Nov 2010 09:25
57 lines
3077 bytes
3077 bytes
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).
pozdrawiam,
Konrad
Re: Django i pole manytomany w template
Author: Łukasz Rekucki
Date: Fri, 26 Nov 2010 11:02
Date: Fri, 26 Nov 2010 11:02
66 lines
3572 bytes
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)
Re: Django i pole manytomany w template
Author: ds
Date: Fri, 26 Nov 2010 16:36
Date: Fri, 26 Nov 2010 16:36
21 lines
1473 bytes
1473 bytes
Łukasz Rekucki wrote:
> 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)
Rozważałem taką opcję, jednak "naturalnym" jest wykorzystanie w pełni ORM-a
zawartego w django. Dlatego bardzo podoba mi się rozwiązanie:
{% for garaz in garaze %}
{% if mojeauto in garaz.auta %}
JEST
{% else %}
NIE MA
{% endif %}
{% endfor %}
--
Pozdrawiam
ds
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads